jacquard_api/place_stream/multistream/
create_target.rs1#[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 #[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
74pub 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
91pub 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 pub trait State: sealed::Sealed {
112 type MultistreamTarget;
113 }
114 pub struct Empty(());
116 impl sealed::Sealed for Empty {}
117 impl State for Empty {
118 type MultistreamTarget = Unset;
119 }
120 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 #[allow(non_camel_case_types)]
128 pub mod members {
129 pub struct multistream_target(());
131 }
132}
133
134pub 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 pub fn new() -> CreateTargetBuilder<'a, create_target_state::Empty> {
144 CreateTargetBuilder::new()
145 }
146}
147
148impl<'a> CreateTargetBuilder<'a, create_target_state::Empty> {
149 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 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 pub fn build(self) -> CreateTarget<'a> {
185 CreateTarget {
186 multistream_target: self._fields.0.unwrap(),
187 extra_data: Default::default(),
188 }
189 }
190 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}