changelog shortlog graph tags branches changeset files revisions annotate raw help

Mercurial > demo / obj/src/lib.rs

changeset 1: e4f8df713d55
parent: eb8ed24e8a76
child: 8f59e2f1b8c4
author: ellis <ellis@rwest.io>
date: Sun, 30 Apr 2023 22:24:18 -0400
permissions: -rw-r--r--
description: scaffolding from lives past
1 //! obj/src/lib.rs --- Objective type library
2 mod err;
3 pub use err::{Error,Result};
4 
5 pub use ron;
6 
7 use ron::extensions::Extensions;
8 use serde::{de::DeserializeOwned, Deserialize, Serialize};
9 use std::io;
10 
11 /// common trait for all config modules. This trait provides functions
12 /// for de/serializing to/from RON, updating fields, and formatting.
13 pub trait Configure: Objective {
14  fn update(&self) -> Result<()> {
15  Ok(())
16  }
17 }
18 
19 /// Objective trait
20 /// Define Object behaviors, implemented by Objects
21 pub trait Objective {
22  fn encode(&self) -> Result<Vec<u8>>
23  where
24  Self: Serialize,
25  {
26  Ok(bincode::serialize(self)?)
27  }
28 
29  fn encode_into<W>(&self, writer: W) -> Result<()>
30  where
31  W: io::Write,
32  Self: Serialize,
33  {
34  Ok(bincode::serialize_into(writer, self)?)
35  }
36 
37  fn decode<'a>(&self, bytes: &'a [u8]) -> Result<Self>
38  where
39  Self: Deserialize<'a>,
40  {
41  Ok(bincode::deserialize(bytes)?)
42  }
43 
44  fn decode_from<R>(&self, rdr: R) -> Result<Self>
45  where
46  R: io::Read,
47  Self: DeserializeOwned,
48  {
49  Ok(bincode::deserialize_from(rdr)?)
50  }
51 
52  fn to_ron_writer<W>(&self, writer: W) -> Result<()>
53  where
54  W: io::Write,
55  Self: Serialize,
56  {
57  Ok(ron::ser::to_writer_pretty(
58  writer,
59  &self,
60  ron::ser::PrettyConfig::new()
61  .indentor(" ".to_owned())
62  .extensions(Extensions::all()),
63  )?)
64  }
65 
66  fn to_ron_string(&self) -> Result<String>
67  where
68  Self: Serialize,
69  {
70  Ok(ron::ser::to_string_pretty(
71  &self,
72  ron::ser::PrettyConfig::new().indentor(" ".to_owned()),
73  )?)
74  }
75 
76  fn from_ron_reader<R>(&self, mut rdr: R) -> Result<Self>
77  where
78  R: io::Read,
79  Self: DeserializeOwned,
80  {
81  let mut bytes = Vec::new();
82  rdr.read_to_end(&mut bytes)?;
83  Ok(ron::de::from_bytes(&bytes)?)
84  }
85 
86  fn from_ron_str<'a>(s: &'a str) -> Result<Self>
87  where
88  Self: Deserialize<'a>,
89  {
90  Ok(ron::de::from_bytes(s.as_bytes())?)
91  }
92 
93  fn to_json_writer<W>(&self, writer: W) -> Result<()>
94  where
95  W: io::Write,
96  Self: Serialize,
97  {
98  // let formatter = serde_json::ser::PrettyFormatter::with_indent(b" ");
99  Ok(serde_json::ser::to_writer_pretty(writer, &self)?)
100  }
101 
102  fn to_json_string(&self) -> Result<String>
103  where
104  Self: Serialize,
105  {
106  Ok(serde_json::ser::to_string_pretty(&self)?)
107  }
108 
109  fn from_json_reader<R>(&self, mut rdr: R) -> Result<Self>
110  where
111  R: io::Read,
112  Self: DeserializeOwned,
113  {
114  let mut bytes = Vec::new();
115  rdr.read_to_end(&mut bytes)?;
116  Ok(serde_json::de::from_slice(&bytes)?)
117  }
118 
119  fn from_json_str<'a>(s: &'a str) -> Result<Self>
120  where
121  Self: Deserialize<'a>,
122  {
123  Ok(serde_json::de::from_slice(s.as_bytes())?)
124  }
125 }