grafbase_sdk/types/
subscription.rs1use serde::Serialize;
2
3use crate::{cbor, wit, SdkError};
4
5use super::Error;
6
7pub struct SubscriptionOutput(wit::FieldOutput);
10
11impl From<SubscriptionOutput> for wit::FieldOutput {
12 fn from(output: SubscriptionOutput) -> Self {
13 output.0
14 }
15}
16
17impl SubscriptionOutput {
18 pub fn builder() -> SubscriptionOutputBuilder {
20 SubscriptionOutputBuilder { items: Vec::new() }
21 }
22
23 pub fn builder_with_capacity(capacity: usize) -> SubscriptionOutputBuilder {
25 SubscriptionOutputBuilder {
26 items: Vec::with_capacity(capacity),
27 }
28 }
29}
30
31pub struct SubscriptionOutputBuilder {
33 items: Vec<Result<Vec<u8>, wit::Error>>,
34}
35
36impl SubscriptionOutputBuilder {
37 pub fn push<T: Serialize>(&mut self, data: T) -> Result<(), SdkError> {
39 let data = cbor::to_vec(data)?;
40 self.items.push(Ok(data));
41 Ok(())
42 }
43
44 pub fn push_error(&mut self, error: impl Into<Error>) {
46 self.items.push(Err(Into::<Error>::into(error).into()));
47 }
48
49 pub fn build(self) -> SubscriptionOutput {
51 SubscriptionOutput(wit::FieldOutput { outputs: self.items })
52 }
53}