11use anyhow:: Result ;
22use saya_core:: {
33 block_ingestor:: BlockInfo ,
4+ data_availability:: {
5+ CelestiaDataAvailabilityBackend , CelestiaDataAvailabilityBackendBuilder ,
6+ DataAvailabilityBackend , DataAvailabilityBackendBuilder , DataAvailabilityCursor ,
7+ DataAvailabilityPayload , DataAvailabilityPointer , NoopDataAvailabilityBackend ,
8+ NoopDataAvailabilityBackendBuilder ,
9+ } ,
410 prover:: {
511 AtlanticLayoutBridgeProver , AtlanticLayoutBridgeProverBuilder , MockLayoutBridgeProver ,
612 MockLayoutBridgeProverBuilder , Prover , ProverBuilder , SnosProof ,
@@ -22,6 +28,87 @@ pub enum AnyLayoutBridgeProverBuilder<DB> {
2228 Mock ( MockLayoutBridgeProverBuilder < DB > ) ,
2329}
2430
31+ #[ derive( Debug ) ]
32+ pub enum AnyDataAvailabilityLayer < P > {
33+ Celestia ( Box < CelestiaDataAvailabilityBackend < P > > ) ,
34+ Noop ( NoopDataAvailabilityBackend < P > ) ,
35+ }
36+
37+ #[ derive( Debug ) ]
38+ pub enum AnyDataAvailabilityLayerBuilder < P > {
39+ Celestia ( Box < CelestiaDataAvailabilityBackendBuilder < P > > ) ,
40+ Noop ( NoopDataAvailabilityBackendBuilder < P > ) ,
41+ }
42+
43+ impl < P > DataAvailabilityBackend for AnyDataAvailabilityLayer < P >
44+ where
45+ P : DataAvailabilityPayload + ' static ,
46+ {
47+ type Payload = P ;
48+ }
49+
50+ impl < P > Daemon for AnyDataAvailabilityLayer < P >
51+ where
52+ P : DataAvailabilityPayload + ' static ,
53+ {
54+ fn shutdown_handle ( & self ) -> ShutdownHandle {
55+ match self {
56+ Self :: Celestia ( inner) => inner. shutdown_handle ( ) ,
57+ Self :: Noop ( inner) => inner. shutdown_handle ( ) ,
58+ }
59+ }
60+
61+ fn start ( self ) {
62+ match self {
63+ Self :: Celestia ( inner) => inner. start ( ) ,
64+ Self :: Noop ( inner) => inner. start ( ) ,
65+ }
66+ }
67+ }
68+
69+ impl < P > DataAvailabilityBackendBuilder for AnyDataAvailabilityLayerBuilder < P >
70+ where
71+ P : DataAvailabilityPayload + ' static ,
72+ {
73+ type Backend = AnyDataAvailabilityLayer < P > ;
74+
75+ fn build ( self ) -> Result < Self :: Backend > {
76+ Ok ( match self {
77+ Self :: Celestia ( inner) => AnyDataAvailabilityLayer :: Celestia ( Box :: new ( inner. build ( ) ?) ) ,
78+ Self :: Noop ( inner) => AnyDataAvailabilityLayer :: Noop ( inner. build ( ) ?) ,
79+ } )
80+ }
81+
82+ fn last_pointer ( self , last_pointer : Option < DataAvailabilityPointer > ) -> Self {
83+ match self {
84+ Self :: Celestia ( inner) => Self :: Celestia ( Box :: new ( inner. last_pointer ( last_pointer) ) ) ,
85+ Self :: Noop ( inner) => Self :: Noop ( inner. last_pointer ( last_pointer) ) ,
86+ }
87+ }
88+
89+ fn proof_channel (
90+ self ,
91+ proof_channel : Receiver < <Self :: Backend as DataAvailabilityBackend >:: Payload > ,
92+ ) -> Self {
93+ match self {
94+ Self :: Celestia ( inner) => Self :: Celestia ( Box :: new ( inner. proof_channel ( proof_channel) ) ) ,
95+ Self :: Noop ( inner) => Self :: Noop ( inner. proof_channel ( proof_channel) ) ,
96+ }
97+ }
98+
99+ fn cursor_channel (
100+ self ,
101+ cursor_channel : Sender <
102+ DataAvailabilityCursor < <Self :: Backend as DataAvailabilityBackend >:: Payload > ,
103+ > ,
104+ ) -> Self {
105+ match self {
106+ Self :: Celestia ( inner) => Self :: Celestia ( Box :: new ( inner. cursor_channel ( cursor_channel) ) ) ,
107+ Self :: Noop ( inner) => Self :: Noop ( inner. cursor_channel ( cursor_channel) ) ,
108+ }
109+ }
110+ }
111+
25112impl < DB > Prover for AnyLayoutBridgeProver < DB >
26113where
27114 DB : PersistantStorage + Send + Sync + Clone + ' static ,
0 commit comments