Skip to content

Commit ded8c30

Browse files
committed
This doesn't work :(
1 parent 0788f30 commit ded8c30

File tree

2 files changed

+105
-1
lines changed

2 files changed

+105
-1
lines changed

source/postcard/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ version = "1.0.12"
6767
optional = true
6868

6969
[features]
70-
default = ["heapless-cas"]
70+
default = ["heapless-cas", "experimental-derive", "use-std"]
7171

7272
# Enables support for `embedded-io` traits
7373
# This feature will track the latest `embedded-io` when major releases are made

source/postcard/src/schema.rs

+104
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use serde::{Deserialize, Serialize};
2+
use postcard_derive::Schema;
23

34
/// A schema type representing a variably encoded integer
45
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
@@ -25,6 +26,24 @@ pub enum Varint {
2526
Isize,
2627
}
2728

29+
impl Schema for Varint {
30+
const SCHEMA: &'static NamedType = &NamedType {
31+
name: "Varint",
32+
ty: &SdmTy::Enum(&[
33+
&NamedVariant { name: "I16", ty: &SdmTy::UnitVariant },
34+
&NamedVariant { name: "I32", ty: &SdmTy::UnitVariant },
35+
&NamedVariant { name: "I64", ty: &SdmTy::UnitVariant },
36+
&NamedVariant { name: "I128", ty: &SdmTy::UnitVariant },
37+
&NamedVariant { name: "U16", ty: &SdmTy::UnitVariant },
38+
&NamedVariant { name: "U32", ty: &SdmTy::UnitVariant },
39+
&NamedVariant { name: "U64", ty: &SdmTy::UnitVariant },
40+
&NamedVariant { name: "U128", ty: &SdmTy::UnitVariant },
41+
&NamedVariant { name: "Usize", ty: &SdmTy::UnitVariant },
42+
&NamedVariant { name: "Isize", ty: &SdmTy::UnitVariant },
43+
]),
44+
};
45+
}
46+
2847
/// Serde Data Model Types (and friends)
2948
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize)]
3049
pub enum SdmTy {
@@ -103,6 +122,62 @@ pub enum SdmTy {
103122
Enum(&'static [&'static NamedVariant]),
104123
}
105124

125+
impl Schema for SdmTy {
126+
const SCHEMA: &'static NamedType = &NamedType {
127+
name: "SdmTy",
128+
ty: &SdmTy::Enum(&[
129+
&NamedVariant { name: "Bool", ty: &SdmTy::UnitVariant },
130+
&NamedVariant { name: "I8", ty: &SdmTy::UnitVariant },
131+
&NamedVariant { name: "U8", ty: &SdmTy::UnitVariant },
132+
&NamedVariant { name: "Varint", ty: &SdmTy::NewtypeVariant(
133+
NamedType::SCHEMA
134+
)},
135+
&NamedVariant { name: "F32", ty: &SdmTy::UnitVariant },
136+
&NamedVariant { name: "F64", ty: &SdmTy::UnitVariant },
137+
&NamedVariant { name: "Char", ty: &SdmTy::UnitVariant },
138+
&NamedVariant { name: "String", ty: &SdmTy::UnitVariant },
139+
&NamedVariant { name: "ByteArray", ty: &SdmTy::UnitVariant },
140+
&NamedVariant { name: "Option", ty: &SdmTy::NewtypeVariant(
141+
NamedType::SCHEMA
142+
)},
143+
&NamedVariant { name: "Unit", ty: &SdmTy::UnitVariant },
144+
&NamedVariant { name: "UnitStruct", ty: &SdmTy::UnitVariant },
145+
&NamedVariant { name: "UnitVariant", ty: &SdmTy::UnitVariant },
146+
&NamedVariant { name: "NewtypeStruct", ty: &SdmTy::NewtypeVariant(
147+
NamedType::SCHEMA
148+
)},
149+
&NamedVariant { name: "NewtypeVariant", ty: &SdmTy::NewtypeVariant(
150+
NamedType::SCHEMA
151+
)},
152+
&NamedVariant { name: "Seq", ty: &SdmTy::NewtypeVariant(
153+
NamedType::SCHEMA
154+
)},
155+
&NamedVariant { name: "Tuple", ty: &SdmTy::NewtypeVariant(
156+
<[NamedType]>::SCHEMA,
157+
)},
158+
&NamedVariant { name: "TupleStruct", ty: &SdmTy::NewtypeVariant(
159+
<[NamedType]>::SCHEMA,
160+
)},
161+
&NamedVariant { name: "TupleVariant", ty: &SdmTy::NewtypeVariant(
162+
<[NamedType]>::SCHEMA,
163+
)},
164+
&NamedVariant { name: "Map", ty: &SdmTy::StructVariant(&[
165+
&NamedValue { name: "key", ty: NamedType::SCHEMA },
166+
&NamedValue { name: "val", ty: NamedType::SCHEMA },
167+
])},
168+
&NamedVariant { name: "Struct", ty: &SdmTy::NewtypeVariant(
169+
<[NamedValue]>::SCHEMA,
170+
)},
171+
&NamedVariant { name: "StructVariant", ty: &SdmTy::NewtypeVariant(
172+
<[NamedValue]>::SCHEMA,
173+
)},
174+
&NamedVariant { name: "Enum", ty: &SdmTy::NewtypeVariant(
175+
<[NamedVariant]>::SCHEMA,
176+
)},
177+
]),
178+
};
179+
}
180+
106181
/// A data type with a name - e.g. a field of a Struct
107182
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize)]
108183
pub struct NamedValue {
@@ -112,6 +187,16 @@ pub struct NamedValue {
112187
pub ty: &'static NamedType,
113188
}
114189

190+
impl Schema for NamedValue {
191+
const SCHEMA: &'static NamedType = &NamedType {
192+
name: "NamedValue",
193+
ty: &SdmTy::Struct(&[
194+
&NamedValue { name: "name", ty: str::SCHEMA },
195+
&NamedValue { name: "ty", ty: NamedType::SCHEMA },
196+
]),
197+
};
198+
}
199+
115200
/// A data type - e.g. a custom `struct Foo{ ... }` type
116201
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize)]
117202
pub struct NamedType {
@@ -121,6 +206,16 @@ pub struct NamedType {
121206
pub ty: &'static SdmTy,
122207
}
123208

209+
impl Schema for NamedType {
210+
const SCHEMA: &'static NamedType = &NamedType {
211+
name: "NamedType",
212+
ty: &SdmTy::Struct(&[
213+
&NamedValue { name: "name", ty: str::SCHEMA },
214+
&NamedValue { name: "ty", ty: SdmTy::SCHEMA },
215+
]),
216+
};
217+
}
218+
124219
/// An enum variant with a name, e.g. `T::Bar(...)`
125220
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize)]
126221
pub struct NamedVariant {
@@ -130,6 +225,15 @@ pub struct NamedVariant {
130225
pub ty: &'static SdmTy,
131226
}
132227

228+
impl Schema for NamedVariant {
229+
const SCHEMA: &'static NamedType = &NamedType {
230+
name: "SdmTy",
231+
ty: &SdmTy::Struct(&[
232+
// TODO stuff should be here
233+
]),
234+
};
235+
}
236+
133237
/// A trait that represents a compile time calculated schema
134238
pub trait Schema {
135239
/// A recursive data structure that describes the schema of the given

0 commit comments

Comments
 (0)