hypersync_net_types/
lib.rs1pub mod block;
8pub mod log;
9pub mod query;
10pub mod response;
11pub mod trace;
12pub mod transaction;
13pub mod types;
14
15mod __generated__;
17pub use __generated__::hypersync_net_types_capnp;
18
19pub use block::{BlockFilter, BlockSelection};
21pub use log::{LogFilter, LogSelection};
22pub use query::{FieldSelection, JoinMode, Query};
23pub use response::{ArchiveHeight, ChainId, RollbackGuard};
24pub use trace::{TraceFilter, TraceSelection};
25pub use transaction::{AuthorizationSelection, TransactionFilter, TransactionSelection};
26pub use types::Sighash;
27
28use serde::{Deserialize, Serialize};
29
30#[derive(Default, Serialize, Deserialize, Clone, Debug, PartialEq)]
31pub struct Selection<T> {
32 #[serde(default, flatten)]
35 pub include: T,
36 #[serde(default, skip_serializing_if = "Option::is_none")]
39 pub exclude: Option<T>,
40}
41
42impl<T> From<T> for Selection<T> {
43 fn from(include: T) -> Self {
44 Self {
45 include,
46 exclude: None,
47 }
48 }
49}
50
51pub(crate) trait BuilderReader<O: capnp::traits::Owned, E = capnp::Error> {
52 fn populate_builder<'a>(&self, builder: &mut O::Builder<'a>) -> Result<(), E>;
53
54 fn from_reader<'a>(reader: O::Reader<'a>) -> Result<Self, E>
55 where
56 Self: Sized;
57}
58
59impl<O, T> BuilderReader<hypersync_net_types_capnp::selection::Owned<O>> for Selection<T>
60where
61 O: capnp::traits::Owned,
62 T: BuilderReader<O, capnp::Error>,
63{
64 fn populate_builder<'a>(
65 &self,
66 builder: &mut hypersync_net_types_capnp::selection::Builder<'a, O>,
67 ) -> Result<(), capnp::Error> {
68 {
69 let mut include_builder = builder.reborrow().init_include();
70 self.include.populate_builder(&mut include_builder)?;
71 } if let Some(exclude) = &self.exclude {
74 let mut exclude_builder = builder.reborrow().init_exclude();
75 exclude.populate_builder(&mut exclude_builder)?;
76 } Ok(())
79 }
80
81 fn from_reader<'a>(
82 reader: hypersync_net_types_capnp::selection::Reader<'a, O>,
83 ) -> Result<Self, capnp::Error> {
84 let include = T::from_reader(reader.get_include()?)?;
85 let exclude = if reader.has_exclude() {
86 Some(T::from_reader(reader.get_exclude()?)?)
87 } else {
88 None
89 };
90 Ok(Self { include, exclude })
91 }
92}