evm_lens_core/storage/
resolver.rs1use async_trait::async_trait;
2
3use super::layout::StorageLayout;
4
5#[async_trait]
6pub trait StorageLayoutResolver: Send + Sync {
7 async fn resolve(&self, input: &[u8]) -> color_eyre::Result<Option<StorageLayout>>;
8}
9
10pub struct CompositeResolver {
13 resolvers: Vec<Box<dyn StorageLayoutResolver>>,
14}
15
16impl CompositeResolver {
17 pub fn new(resolvers: Vec<Box<dyn StorageLayoutResolver>>) -> Self {
18 Self { resolvers }
19 }
20
21 pub async fn resolve(&self, input: &[u8]) -> color_eyre::Result<StorageLayout> {
22 for r in &self.resolvers {
23 if let Some(l) = r.resolve(input).await? {
24 return Ok(l);
25 }
26 }
27 Ok(StorageLayout::new())
28 }
29}