@@ -344,6 +344,9 @@ maybe_sol_attr! {
344
344
feature = "serde" , derive( serde:: Serialize , serde:: Deserialize ) ,
345
345
serde( deny_unknown_fields)
346
346
) ]
347
+ #[ cfg_attr(
348
+ feature = "schemars" , derive( schemars:: JsonSchema ) ,
349
+ ) ]
347
350
enum ConnectionState {
348
351
Unspecified ,
349
352
Init ,
@@ -355,6 +358,9 @@ maybe_sol_attr! {
355
358
feature = "serde" , derive( serde:: Serialize , serde:: Deserialize ) ,
356
359
serde( deny_unknown_fields)
357
360
) ]
361
+ #[ cfg_attr(
362
+ feature = "schemars" , derive( schemars:: JsonSchema ) ,
363
+ ) ]
358
364
struct Connection {
359
365
ConnectionState state;
360
366
uint32 client_id;
@@ -366,6 +372,9 @@ maybe_sol_attr! {
366
372
feature = "serde" , derive( serde:: Serialize , serde:: Deserialize ) ,
367
373
serde( deny_unknown_fields)
368
374
) ]
375
+ #[ cfg_attr(
376
+ feature = "schemars" , derive( schemars:: JsonSchema ) ,
377
+ ) ]
369
378
enum ChannelState {
370
379
Unspecified ,
371
380
Init ,
@@ -613,6 +622,64 @@ maybe_sol_attr! {
613
622
}
614
623
}
615
624
625
+ #[ cfg( feature = "schemars" ) ]
626
+ /// We need a custom implementation because alloy::Bytes doesn't implement JsonSchema
627
+ impl schemars:: JsonSchema for Channel {
628
+ fn schema_name ( ) -> String {
629
+ "Channel" . to_string ( )
630
+ }
631
+ fn schema_id ( ) -> std:: borrow:: Cow < ' static , str > {
632
+ std:: borrow:: Cow :: Borrowed ( "ibc_solidity::Channel" )
633
+ }
634
+
635
+ fn json_schema ( gen : & mut schemars:: gen:: SchemaGenerator ) -> schemars:: schema:: Schema {
636
+ let mut schema_object = schemars:: schema:: SchemaObject {
637
+ instance_type : Some ( schemars:: schema:: InstanceType :: Object . into ( ) ) ,
638
+ ..Default :: default ( )
639
+ } ;
640
+ let object_validation = schema_object. object ( ) ;
641
+ {
642
+ schemars:: _private:: insert_object_property :: < ChannelState > (
643
+ object_validation,
644
+ "state" ,
645
+ false ,
646
+ true ,
647
+ gen. subschema_for :: < ChannelState > ( ) ,
648
+ ) ;
649
+ schemars:: _private:: insert_object_property :: < u32 > (
650
+ object_validation,
651
+ "connection_id" ,
652
+ false ,
653
+ true ,
654
+ gen. subschema_for :: < u32 > ( ) ,
655
+ ) ;
656
+ schemars:: _private:: insert_object_property :: < u32 > (
657
+ object_validation,
658
+ "counterparty_channel_id" ,
659
+ false ,
660
+ true ,
661
+ gen. subschema_for :: < u32 > ( ) ,
662
+ ) ;
663
+ schemars:: _private:: insert_object_property :: < Vec < u8 > > (
664
+ object_validation,
665
+ "counterparty_port_id" ,
666
+ false ,
667
+ true ,
668
+ gen. subschema_for :: < Vec < u8 > > ( ) ,
669
+ ) ;
670
+ schemars:: _private:: insert_object_property :: < String > (
671
+ object_validation,
672
+ "version" ,
673
+ false ,
674
+ true ,
675
+ gen. subschema_for :: < String > ( ) ,
676
+ ) ;
677
+ }
678
+
679
+ schemars:: schema:: Schema :: Object ( schema_object)
680
+ }
681
+ }
682
+
616
683
impl Clone for Ibc :: IbcEvents {
617
684
fn clone ( & self ) -> Self {
618
685
match self {
0 commit comments