@@ -56,6 +56,17 @@ pub enum PdlType {
5656pub struct Metadata {
5757 #[ serde( skip_serializing_if = "Option::is_none" ) ]
5858 pub defs : Option < IndexMap < String , PdlBlock > > ,
59+
60+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
61+ pub def : Option < String > ,
62+ }
63+ impl Default for Metadata {
64+ fn default ( ) -> Self {
65+ Self {
66+ defs : None ,
67+ def : None ,
68+ }
69+ }
5970}
6071
6172/// Call a function
@@ -88,7 +99,6 @@ pub trait SequencingBlock {
8899 fn kind ( & self ) -> & str ;
89100 fn description ( & self ) -> & Option < String > ;
90101 fn role ( & self ) -> & Option < Role > ;
91- fn def ( & self ) -> & Option < String > ;
92102 fn metadata ( & self ) -> & Option < Metadata > ;
93103 fn items ( & self ) -> & Vec < PdlBlock > ;
94104 fn with_items ( & self , items : Vec < PdlBlock > ) -> Self ;
@@ -118,9 +128,6 @@ pub struct LastOfBlock {
118128
119129 #[ serde( skip_serializing_if = "Option::is_none" ) ]
120130 pub parser : Option < PdlParser > ,
121-
122- #[ serde( skip_serializing_if = "Option::is_none" ) ]
123- pub def : Option < String > ,
124131}
125132impl SequencingBlock for LastOfBlock {
126133 fn kind ( & self ) -> & str {
@@ -132,9 +139,6 @@ impl SequencingBlock for LastOfBlock {
132139 fn role ( & self ) -> & Option < Role > {
133140 & self . role
134141 }
135- fn def ( & self ) -> & Option < String > {
136- return & self . def ;
137- }
138142 fn metadata ( & self ) -> & Option < Metadata > {
139143 & self . metadata
140144 }
@@ -186,9 +190,6 @@ pub struct TextBlock {
186190
187191 #[ serde( skip_serializing_if = "Option::is_none" ) ]
188192 pub parser : Option < PdlParser > ,
189-
190- #[ serde( skip_serializing_if = "Option::is_none" ) ]
191- pub def : Option < String > ,
192193}
193194impl SequencingBlock for TextBlock {
194195 fn kind ( & self ) -> & str {
@@ -200,9 +201,6 @@ impl SequencingBlock for TextBlock {
200201 fn role ( & self ) -> & Option < Role > {
201202 & self . role
202203 }
203- fn def ( & self ) -> & Option < String > {
204- return & self . def ;
205- }
206204 fn metadata ( & self ) -> & Option < Metadata > {
207205 & self . metadata
208206 }
@@ -237,7 +235,6 @@ impl SequencingBlock for TextBlock {
237235impl TextBlock {
238236 pub fn new ( text : Vec < PdlBlock > ) -> Self {
239237 TextBlock {
240- def : None ,
241238 metadata : None ,
242239 description : None ,
243240 role : None ,
@@ -247,7 +244,16 @@ impl TextBlock {
247244 }
248245
249246 pub fn def ( & mut self , def : & str ) -> & mut Self {
250- self . def = Some ( def. into ( ) ) ;
247+ match & mut self . metadata {
248+ Some ( metadata) => {
249+ metadata. def = Some ( def. into ( ) ) ;
250+ }
251+ None => {
252+ let mut metadata: Metadata = Default :: default ( ) ;
253+ metadata. def = Some ( def. into ( ) ) ;
254+ self . metadata = Some ( metadata) ;
255+ }
256+ }
251257 self
252258 }
253259
@@ -295,12 +301,14 @@ pub struct PdlUsage {
295301#[ derive( Serialize , Deserialize , Debug , Clone ) ]
296302#[ serde( tag = "kind" , rename = "model" ) ]
297303pub struct ModelBlock {
304+ #[ serde( flatten) ]
305+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
306+ pub metadata : Option < Metadata > ,
307+
298308 #[ serde( skip_serializing_if = "Option::is_none" ) ]
299309 pub description : Option < String > ,
300310 pub model : String ,
301311 #[ serde( skip_serializing_if = "Option::is_none" ) ]
302- pub def : Option < String > ,
303- #[ serde( skip_serializing_if = "Option::is_none" ) ]
304312 pub parameters : Option < HashMap < String , Value > > ,
305313 #[ serde( skip_serializing_if = "Option::is_none" ) ]
306314 pub input : Option < Box < PdlBlock > > ,
@@ -318,7 +326,7 @@ pub struct ModelBlock {
318326impl ModelBlock {
319327 pub fn new ( model : & str ) -> Self {
320328 ModelBlock {
321- def : None ,
329+ metadata : None ,
322330 description : None ,
323331 model_response : None ,
324332 parameters : None ,
@@ -433,15 +441,16 @@ pub struct ObjectBlock {
433441#[ derive( Serialize , Deserialize , Debug , Clone ) ]
434442#[ serde( tag = "kind" ) ]
435443pub struct DataBlock {
444+ #[ serde( flatten) ]
445+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
446+ pub metadata : Option < Metadata > ,
447+
436448 pub data : Value ,
437449
438450 /// Do not evaluate expressions inside strings.
439451 #[ serde( skip_serializing_if = "Option::is_none" ) ]
440452 pub raw : Option < bool > ,
441453
442- #[ serde( skip_serializing_if = "Option::is_none" ) ]
443- pub def : Option < String > ,
444-
445454 #[ serde( skip_serializing_if = "Option::is_none" ) ]
446455 pub parser : Option < PdlParser > ,
447456}
@@ -486,6 +495,10 @@ pub enum StringOrNull {
486495#[ derive( Serialize , Deserialize , Debug , Clone ) ]
487496#[ serde( tag = "kind" , rename = "read" ) ]
488497pub struct ReadBlock {
498+ #[ serde( flatten) ]
499+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
500+ pub metadata : Option < Metadata > ,
501+
489502 /// Name of the file to read. If `None`, read the standard input.
490503 pub read : StringOrNull ,
491504
@@ -495,9 +508,6 @@ pub struct ReadBlock {
495508 /// Indicate if one or multiple lines should be read.
496509 pub multiline : Option < bool > ,
497510
498- #[ serde( skip_serializing_if = "Option::is_none" ) ]
499- pub def : Option < String > ,
500-
501511 #[ serde( skip_serializing_if = "Option::is_none" ) ]
502512 pub parser : Option < PdlParser > ,
503513}
0 commit comments