11use cgp:: core:: error:: { ErrorRaiserComponent , ErrorTypeProviderComponent } ;
2- use cgp:: extra:: handler:: CanTryCompute ;
32use cgp:: prelude:: * ;
43use cgp_error_anyhow:: { RaiseAnyhowError , UseAnyhowError } ;
54use cgp_serde:: components:: { CanDeserializeValue , ValueDeserializer , ValueDeserializerComponent } ;
65use cgp_serde:: providers:: { DeserializeExtend , DeserializeRecordFields , UseSerde } ;
7- use cgp_serde_json:: code:: { DeserializeJson , SerializeJson } ;
8- use cgp_serde_json:: { DeserializeFromJsonString , SerializeToJsonString } ;
6+ use cgp_serde_json:: impls:: CanDeserializeJsonString ;
97use typed_arena:: Arena ;
108
119#[ cgp_auto_getter]
@@ -18,26 +16,26 @@ impl<'de, 'a, Context, Value> ValueDeserializer<'de, &'a Value> for Context
1816where
1917 Context : HasArena < ' a , Value > + CanDeserializeValue < ' de , Value > ,
2018{
21- fn deserialize < D > ( context : & Context , deserializer : D ) -> Result < & ' a Value , D :: Error >
19+ fn deserialize < D > ( & self , deserializer : D ) -> Result < & ' a Value , D :: Error >
2220 where
2321 D : serde:: Deserializer < ' de > ,
2422 {
25- let value = context . deserialize ( deserializer) ?;
26- let value = context . arena ( ) . alloc ( value) ;
23+ let value = self . deserialize ( deserializer) ?;
24+ let value = self . arena ( ) . alloc ( value) ;
2725
2826 Ok ( value)
2927 }
3028}
3129
32- #[ derive( Debug , PartialEq , Eq , HasFields , BuildField ) ]
30+ #[ derive( Debug , PartialEq , Eq , CgpData ) ]
3331pub struct Coord {
3432 pub x : u64 ,
3533 pub y : u64 ,
3634 pub z : u64 ,
3735}
3836
39- #[ derive( Debug , PartialEq , Eq , HasFields , BuildField ) ]
40- pub struct Payload < ' a > {
37+ #[ derive( Debug , PartialEq , Eq , CgpData ) ]
38+ pub struct Cluster < ' a > {
4139 pub id : u64 ,
4240 pub coords : Vec < & ' a Coord > ,
4341}
@@ -48,31 +46,25 @@ pub struct App<'a> {
4846}
4947
5048delegate_components ! {
51- <' a> App <' a> {
52- ErrorTypeProviderComponent :
53- UseAnyhowError ,
54- ErrorRaiserComponent :
55- RaiseAnyhowError ,
49+ <' s> App <' s> {
5650 ValueDeserializerComponent :
5751 UseDelegate <new DeserializeComponents {
5852 u64 : UseSerde ,
59- Coord :
53+ [
54+ Coord ,
55+ <' a> Cluster <' a>,
56+ ] :
6057 DeserializeRecordFields ,
6158 <' a> & ' a Coord :
6259 DeserializeAndAllocate ,
6360 <' a> Vec <& ' a Coord >:
6461 DeserializeExtend ,
65- <' a> Payload <' a>:
66- DeserializeRecordFields ,
6762
6863 } >,
69- TryComputerComponent :
70- UseDelegate <new JsonEncodingComponents {
71- SerializeJson :
72- SerializeToJsonString ,
73- <T > DeserializeJson <T >:
74- DeserializeFromJsonString
75- } >,
64+ ErrorTypeProviderComponent :
65+ UseAnyhowError ,
66+ ErrorRaiserComponent :
67+ RaiseAnyhowError ,
7668 }
7769}
7870
@@ -90,7 +82,7 @@ check_components! {
9082 ( Life <' de>, u64 ) ,
9183 ( Life <' de>, Coord ) ,
9284 ( Life <' de>, & ' a Coord ) ,
93- ( Life <' de>, Payload <' a>) ,
85+ ( Life <' de>, Cluster <' a>) ,
9486 ]
9587 }
9688}
@@ -110,12 +102,11 @@ fn test_deserialize_with_arena() {
110102 let arena = Arena :: new ( ) ;
111103 let app = App { arena : & arena } ;
112104
113- let deserialized: Payload < ' _ > = app
114- . try_compute ( PhantomData :: < DeserializeJson < Payload < ' _ > > > , & serialized)
115- . unwrap ( ) ;
105+ let deserialized: Cluster < ' _ > = app. deserialize_json_string ( & serialized) . unwrap ( ) ;
106+
116107 assert_eq ! (
117108 deserialized,
118- Payload {
109+ Cluster {
119110 id: 8 ,
120111 coords: vec![ & Coord { x: 1 , y: 2 , z: 3 } , & Coord { x: 4 , y: 5 , z: 6 } , ]
121112 }
0 commit comments