user: User,
}
-mod timespec_serde {
- use super::*;
-
- #[derive(Serialize, Deserialize)]
- struct Timespec(i64, u32);
-
- #[throws(S::Error)]
- pub fn serialize<S:Serializer>(v: &TimeSpec, s: S) -> S::Ok {
- let v = Timespec(v.tv_sec().into(), v.tv_nsec().try_into().unwrap());
- Serialize::serialize(&v, s)?
- }
- #[throws(D::Error)]
- pub fn deserialize<'de, D:Deserializer<'de>>(d: D) -> TimeSpec {
- let Timespec(sec, nsec) = Deserialize::deserialize(d)?;
- libc::timespec { tv_sec: sec.into(), tv_nsec: nsec.into() }.into()
- }
-}
-
impl ChessClock {
fn time(&self) -> TimeSpec {
TVL::seconds(self.time.into())
checked_float!{checked_mul(, rhs: Self) * rhs }
}
+pub mod timespec_serde {
+ use super::*;
+
+ #[derive(Serialize, Deserialize)]
+ struct Timespec(i64, u32);
+
+ #[throws(S::Error)]
+ pub fn serialize<S:Serializer>(v: &TimeSpec, s: S) -> S::Ok {
+ let v = Timespec(v.tv_sec().into(), v.tv_nsec().try_into().unwrap());
+ Serialize::serialize(&v, s)?
+ }
+ #[throws(D::Error)]
+ pub fn deserialize<'de, D:Deserializer<'de>>(d: D) -> TimeSpec {
+ let Timespec(sec, nsec) = Deserialize::deserialize(d)?;
+ libc::timespec { tv_sec: sec.into(), tv_nsec: nsec.into() }.into()
+ }
+}
+
pub fn toml_merge<'u,
S: 'u + AsRef<str>,
KV: IntoIterator<Item=(&'u S, &'u toml::Value)>