Skip to content

Commit c53a4ee

Browse files
committed
Add Box support
1 parent 331b514 commit c53a4ee

File tree

5 files changed

+56
-0
lines changed

5 files changed

+56
-0
lines changed

packages/cw-schema/src/default_impls.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use crate::{MapKind, Node, NodeType, Schemaifier};
22
use alloc::{
33
borrow::{Cow, ToOwned},
4+
boxed::Box,
45
collections::BTreeMap,
56
string::String,
67
vec,
@@ -113,6 +114,24 @@ impl Schemaifier for bool {
113114
}
114115
}
115116

117+
impl<T> Schemaifier for Box<T>
118+
where
119+
T: Schemaifier + ?Sized,
120+
{
121+
#[inline]
122+
fn visit_schema(visitor: &mut crate::SchemaVisitor) -> crate::DefinitionReference {
123+
let node = Node {
124+
name: Cow::Borrowed(std::any::type_name::<Self>()),
125+
description: None,
126+
value: NodeType::Boxed {
127+
inner: T::visit_schema(visitor),
128+
},
129+
};
130+
131+
visitor.insert(Self::id(), node)
132+
}
133+
}
134+
116135
impl<T> Schemaifier for Vec<T>
117136
where
118137
T: Schemaifier,

packages/cw-schema/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,9 @@ pub enum NodeType {
124124
value: DefinitionReference,
125125
},
126126

127+
Boxed {
128+
inner: DefinitionReference,
129+
},
127130
Optional {
128131
inner: DefinitionReference,
129132
},

packages/cw-schema/tests/derive.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ struct HelloWorld {
1919

2020
/// Tuple field!
2121
tuple: (u32, u32),
22+
23+
/// Boxed field!
24+
boxed: Box<str>,
2225
}
2326

2427
#[derive(Schemaifier)]

packages/cw-schema/tests/snapshots/basic__snapshot_jsonschema.snap

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,24 @@ expression: schema
364364
"value"
365365
]
366366
},
367+
{
368+
"type": "object",
369+
"properties": {
370+
"type": {
371+
"type": "string",
372+
"const": "boxed"
373+
},
374+
"inner": {
375+
"type": "integer",
376+
"format": "uint",
377+
"minimum": 0
378+
}
379+
},
380+
"required": [
381+
"type",
382+
"inner"
383+
]
384+
},
367385
{
368386
"type": "object",
369387
"properties": {

packages/cw-schema/tests/snapshots/derive__snapshot_schema.snap

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ expression: schema
1515
"description": "Baz field!",
1616
"value": 5
1717
},
18+
"boxed": {
19+
"description": "Boxed field!",
20+
"value": 9
21+
},
1822
"foo": {
1923
"description": "Foo field!",
2024
"value": 4
@@ -106,6 +110,15 @@ expression: schema
106110
3,
107111
3
108112
]
113+
},
114+
{
115+
"name": "str",
116+
"type": "string"
117+
},
118+
{
119+
"name": "alloc::boxed::Box<str>",
120+
"type": "boxed",
121+
"inner": 8
109122
}
110123
]
111124
}

0 commit comments

Comments
 (0)