changelog shortlog graph tags branches changeset files file revisions raw help

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