Skip to main content

jacquard_api/place_stream/multistream/
create_target.rs

1// @generated by jacquard-lexicon. DO NOT EDIT.
2//
3// Lexicon: place.stream.multistream.createTarget
4//
5// This file was automatically generated from Lexicon schemas.
6// Any manual changes will be overwritten on the next regeneration.
7
8#[allow(unused_imports)]
9use alloc::collections::BTreeMap;
10
11#[allow(unused_imports)]
12use core::marker::PhantomData;
13use jacquard_common::CowStr;
14use jacquard_derive::{IntoStatic, lexicon, open_union};
15use serde::{Serialize, Deserialize};
16use crate::place_stream::multistream::TargetView;
17use crate::place_stream::multistream::target::Target;
18
19#[lexicon]
20#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
21#[serde(rename_all = "camelCase")]
22pub struct CreateTarget<'a> {
23    #[serde(borrow)]
24    pub multistream_target: Target<'a>,
25}
26
27
28#[lexicon]
29#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
30#[serde(rename_all = "camelCase")]
31pub struct CreateTargetOutput<'a> {
32    #[serde(flatten)]
33    #[serde(borrow)]
34    pub value: TargetView<'a>,
35}
36
37
38#[open_union]
39#[derive(
40    Serialize,
41    Deserialize,
42    Debug,
43    Clone,
44    PartialEq,
45    Eq,
46    thiserror::Error,
47    miette::Diagnostic,
48    IntoStatic
49)]
50
51#[serde(tag = "error", content = "message")]
52#[serde(bound(deserialize = "'de: 'a"))]
53pub enum CreateTargetError<'a> {
54    /// The provided target URL is invalid or unreachable.
55    #[serde(rename = "InvalidTargetUrl")]
56    InvalidTargetUrl(Option<CowStr<'a>>),
57}
58
59impl core::fmt::Display for CreateTargetError<'_> {
60    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
61        match self {
62            Self::InvalidTargetUrl(msg) => {
63                write!(f, "InvalidTargetUrl")?;
64                if let Some(msg) = msg {
65                    write!(f, ": {}", msg)?;
66                }
67                Ok(())
68            }
69            Self::Unknown(err) => write!(f, "Unknown error: {:?}", err),
70        }
71    }
72}
73
74/// Response type for place.stream.multistream.createTarget
75pub struct CreateTargetResponse;
76impl jacquard_common::xrpc::XrpcResp for CreateTargetResponse {
77    const NSID: &'static str = "place.stream.multistream.createTarget";
78    const ENCODING: &'static str = "application/json";
79    type Output<'de> = CreateTargetOutput<'de>;
80    type Err<'de> = CreateTargetError<'de>;
81}
82
83impl<'a> jacquard_common::xrpc::XrpcRequest for CreateTarget<'a> {
84    const NSID: &'static str = "place.stream.multistream.createTarget";
85    const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure(
86        "application/json",
87    );
88    type Response = CreateTargetResponse;
89}
90
91/// Endpoint type for place.stream.multistream.createTarget
92pub struct CreateTargetRequest;
93impl jacquard_common::xrpc::XrpcEndpoint for CreateTargetRequest {
94    const PATH: &'static str = "/xrpc/place.stream.multistream.createTarget";
95    const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure(
96        "application/json",
97    );
98    type Request<'de> = CreateTarget<'de>;
99    type Response = CreateTargetResponse;
100}
101
102pub mod create_target_state {
103
104    pub use crate::builder_types::{Set, Unset, IsSet, IsUnset};
105    #[allow(unused)]
106    use ::core::marker::PhantomData;
107    mod sealed {
108        pub trait Sealed {}
109    }
110    /// State trait tracking which required fields have been set
111    pub trait State: sealed::Sealed {
112        type MultistreamTarget;
113    }
114    /// Empty state - all required fields are unset
115    pub struct Empty(());
116    impl sealed::Sealed for Empty {}
117    impl State for Empty {
118        type MultistreamTarget = Unset;
119    }
120    ///State transition - sets the `multistream_target` field to Set
121    pub struct SetMultistreamTarget<S: State = Empty>(PhantomData<fn() -> S>);
122    impl<S: State> sealed::Sealed for SetMultistreamTarget<S> {}
123    impl<S: State> State for SetMultistreamTarget<S> {
124        type MultistreamTarget = Set<members::multistream_target>;
125    }
126    /// Marker types for field names
127    #[allow(non_camel_case_types)]
128    pub mod members {
129        ///Marker type for the `multistream_target` field
130        pub struct multistream_target(());
131    }
132}
133
134/// Builder for constructing an instance of this type
135pub struct CreateTargetBuilder<'a, S: create_target_state::State> {
136    _state: PhantomData<fn() -> S>,
137    _fields: (Option<Target<'a>>,),
138    _lifetime: PhantomData<&'a ()>,
139}
140
141impl<'a> CreateTarget<'a> {
142    /// Create a new builder for this type
143    pub fn new() -> CreateTargetBuilder<'a, create_target_state::Empty> {
144        CreateTargetBuilder::new()
145    }
146}
147
148impl<'a> CreateTargetBuilder<'a, create_target_state::Empty> {
149    /// Create a new builder with all fields unset
150    pub fn new() -> Self {
151        CreateTargetBuilder {
152            _state: PhantomData,
153            _fields: (None,),
154            _lifetime: PhantomData,
155        }
156    }
157}
158
159impl<'a, S> CreateTargetBuilder<'a, S>
160where
161    S: create_target_state::State,
162    S::MultistreamTarget: create_target_state::IsUnset,
163{
164    /// Set the `multistreamTarget` field (required)
165    pub fn multistream_target(
166        mut self,
167        value: impl Into<Target<'a>>,
168    ) -> CreateTargetBuilder<'a, create_target_state::SetMultistreamTarget<S>> {
169        self._fields.0 = Option::Some(value.into());
170        CreateTargetBuilder {
171            _state: PhantomData,
172            _fields: self._fields,
173            _lifetime: PhantomData,
174        }
175    }
176}
177
178impl<'a, S> CreateTargetBuilder<'a, S>
179where
180    S: create_target_state::State,
181    S::MultistreamTarget: create_target_state::IsSet,
182{
183    /// Build the final struct
184    pub fn build(self) -> CreateTarget<'a> {
185        CreateTarget {
186            multistream_target: self._fields.0.unwrap(),
187            extra_data: Default::default(),
188        }
189    }
190    /// Build the final struct with custom extra_data
191    pub fn build_with_data(
192        self,
193        extra_data: BTreeMap<
194            jacquard_common::deps::smol_str::SmolStr,
195            jacquard_common::types::value::Data<'a>,
196        >,
197    ) -> CreateTarget<'a> {
198        CreateTarget {
199            multistream_target: self._fields.0.unwrap(),
200            extra_data: Some(extra_data),
201        }
202    }
203}