atproto blogging
at main 645 lines 26 kB view raw
1// @generated by jacquard-lexicon. DO NOT EDIT. 2// 3// Lexicon: app.bsky.unspecced.getPostThreadV2 4// 5// This file was automatically generated from Lexicon schemas. 6// Any manual changes will be overwritten on the next regeneration. 7 8#[derive( 9 serde::Serialize, 10 serde::Deserialize, 11 Debug, 12 Clone, 13 PartialEq, 14 Eq, 15 jacquard_derive::IntoStatic 16)] 17#[serde(rename_all = "camelCase")] 18pub struct GetPostThreadV2<'a> { 19 /// (default: true) 20 #[serde(skip_serializing_if = "std::option::Option::is_none")] 21 pub above: std::option::Option<bool>, 22 #[serde(borrow)] 23 pub anchor: jacquard_common::types::string::AtUri<'a>, 24 ///(default: 6, min: 0, max: 20) 25 #[serde(skip_serializing_if = "std::option::Option::is_none")] 26 pub below: std::option::Option<i64>, 27 ///(default: 10, min: 0, max: 100) 28 #[serde(skip_serializing_if = "std::option::Option::is_none")] 29 pub branching_factor: std::option::Option<i64>, 30 ///(default: "oldest") 31 #[serde(skip_serializing_if = "std::option::Option::is_none")] 32 #[serde(borrow)] 33 pub sort: std::option::Option<jacquard_common::CowStr<'a>>, 34} 35 36pub mod get_post_thread_v2_state { 37 38 pub use crate::builder_types::{Set, Unset, IsSet, IsUnset}; 39 #[allow(unused)] 40 use ::core::marker::PhantomData; 41 mod sealed { 42 pub trait Sealed {} 43 } 44 /// State trait tracking which required fields have been set 45 pub trait State: sealed::Sealed { 46 type Anchor; 47 } 48 /// Empty state - all required fields are unset 49 pub struct Empty(()); 50 impl sealed::Sealed for Empty {} 51 impl State for Empty { 52 type Anchor = Unset; 53 } 54 ///State transition - sets the `anchor` field to Set 55 pub struct SetAnchor<S: State = Empty>(PhantomData<fn() -> S>); 56 impl<S: State> sealed::Sealed for SetAnchor<S> {} 57 impl<S: State> State for SetAnchor<S> { 58 type Anchor = Set<members::anchor>; 59 } 60 /// Marker types for field names 61 #[allow(non_camel_case_types)] 62 pub mod members { 63 ///Marker type for the `anchor` field 64 pub struct anchor(()); 65 } 66} 67 68/// Builder for constructing an instance of this type 69pub struct GetPostThreadV2Builder<'a, S: get_post_thread_v2_state::State> { 70 _phantom_state: ::core::marker::PhantomData<fn() -> S>, 71 __unsafe_private_named: ( 72 ::core::option::Option<bool>, 73 ::core::option::Option<jacquard_common::types::string::AtUri<'a>>, 74 ::core::option::Option<i64>, 75 ::core::option::Option<i64>, 76 ::core::option::Option<jacquard_common::CowStr<'a>>, 77 ), 78 _phantom: ::core::marker::PhantomData<&'a ()>, 79} 80 81impl<'a> GetPostThreadV2<'a> { 82 /// Create a new builder for this type 83 pub fn new() -> GetPostThreadV2Builder<'a, get_post_thread_v2_state::Empty> { 84 GetPostThreadV2Builder::new() 85 } 86} 87 88impl<'a> GetPostThreadV2Builder<'a, get_post_thread_v2_state::Empty> { 89 /// Create a new builder with all fields unset 90 pub fn new() -> Self { 91 GetPostThreadV2Builder { 92 _phantom_state: ::core::marker::PhantomData, 93 __unsafe_private_named: (None, None, None, None, None), 94 _phantom: ::core::marker::PhantomData, 95 } 96 } 97} 98 99impl<'a, S: get_post_thread_v2_state::State> GetPostThreadV2Builder<'a, S> { 100 /// Set the `above` field (optional) 101 pub fn above(mut self, value: impl Into<Option<bool>>) -> Self { 102 self.__unsafe_private_named.0 = value.into(); 103 self 104 } 105 /// Set the `above` field to an Option value (optional) 106 pub fn maybe_above(mut self, value: Option<bool>) -> Self { 107 self.__unsafe_private_named.0 = value; 108 self 109 } 110} 111 112impl<'a, S> GetPostThreadV2Builder<'a, S> 113where 114 S: get_post_thread_v2_state::State, 115 S::Anchor: get_post_thread_v2_state::IsUnset, 116{ 117 /// Set the `anchor` field (required) 118 pub fn anchor( 119 mut self, 120 value: impl Into<jacquard_common::types::string::AtUri<'a>>, 121 ) -> GetPostThreadV2Builder<'a, get_post_thread_v2_state::SetAnchor<S>> { 122 self.__unsafe_private_named.1 = ::core::option::Option::Some(value.into()); 123 GetPostThreadV2Builder { 124 _phantom_state: ::core::marker::PhantomData, 125 __unsafe_private_named: self.__unsafe_private_named, 126 _phantom: ::core::marker::PhantomData, 127 } 128 } 129} 130 131impl<'a, S: get_post_thread_v2_state::State> GetPostThreadV2Builder<'a, S> { 132 /// Set the `below` field (optional) 133 pub fn below(mut self, value: impl Into<Option<i64>>) -> Self { 134 self.__unsafe_private_named.2 = value.into(); 135 self 136 } 137 /// Set the `below` field to an Option value (optional) 138 pub fn maybe_below(mut self, value: Option<i64>) -> Self { 139 self.__unsafe_private_named.2 = value; 140 self 141 } 142} 143 144impl<'a, S: get_post_thread_v2_state::State> GetPostThreadV2Builder<'a, S> { 145 /// Set the `branchingFactor` field (optional) 146 pub fn branching_factor(mut self, value: impl Into<Option<i64>>) -> Self { 147 self.__unsafe_private_named.3 = value.into(); 148 self 149 } 150 /// Set the `branchingFactor` field to an Option value (optional) 151 pub fn maybe_branching_factor(mut self, value: Option<i64>) -> Self { 152 self.__unsafe_private_named.3 = value; 153 self 154 } 155} 156 157impl<'a, S: get_post_thread_v2_state::State> GetPostThreadV2Builder<'a, S> { 158 /// Set the `sort` field (optional) 159 pub fn sort( 160 mut self, 161 value: impl Into<Option<jacquard_common::CowStr<'a>>>, 162 ) -> Self { 163 self.__unsafe_private_named.4 = value.into(); 164 self 165 } 166 /// Set the `sort` field to an Option value (optional) 167 pub fn maybe_sort(mut self, value: Option<jacquard_common::CowStr<'a>>) -> Self { 168 self.__unsafe_private_named.4 = value; 169 self 170 } 171} 172 173impl<'a, S> GetPostThreadV2Builder<'a, S> 174where 175 S: get_post_thread_v2_state::State, 176 S::Anchor: get_post_thread_v2_state::IsSet, 177{ 178 /// Build the final struct 179 pub fn build(self) -> GetPostThreadV2<'a> { 180 GetPostThreadV2 { 181 above: self.__unsafe_private_named.0, 182 anchor: self.__unsafe_private_named.1.unwrap(), 183 below: self.__unsafe_private_named.2, 184 branching_factor: self.__unsafe_private_named.3, 185 sort: self.__unsafe_private_named.4, 186 } 187 } 188} 189 190#[jacquard_derive::lexicon] 191#[derive( 192 serde::Serialize, 193 serde::Deserialize, 194 Debug, 195 Clone, 196 PartialEq, 197 Eq, 198 jacquard_derive::IntoStatic 199)] 200#[serde(rename_all = "camelCase")] 201pub struct GetPostThreadV2Output<'a> { 202 /// Whether this thread has additional replies. If true, a call can be made to the `getPostThreadOtherV2` endpoint to retrieve them. 203 pub has_other_replies: bool, 204 /// A flat list of thread items. The depth of each item is indicated by the depth property inside the item. 205 #[serde(borrow)] 206 pub thread: Vec<crate::app_bsky::unspecced::get_post_thread_v2::ThreadItem<'a>>, 207 #[serde(skip_serializing_if = "std::option::Option::is_none")] 208 #[serde(borrow)] 209 pub threadgate: std::option::Option<crate::app_bsky::feed::ThreadgateView<'a>>, 210} 211 212/// Response type for 213///app.bsky.unspecced.getPostThreadV2 214pub struct GetPostThreadV2Response; 215impl jacquard_common::xrpc::XrpcResp for GetPostThreadV2Response { 216 const NSID: &'static str = "app.bsky.unspecced.getPostThreadV2"; 217 const ENCODING: &'static str = "application/json"; 218 type Output<'de> = GetPostThreadV2Output<'de>; 219 type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 220} 221 222impl<'a> jacquard_common::xrpc::XrpcRequest for GetPostThreadV2<'a> { 223 const NSID: &'static str = "app.bsky.unspecced.getPostThreadV2"; 224 const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 225 type Response = GetPostThreadV2Response; 226} 227 228/// Endpoint type for 229///app.bsky.unspecced.getPostThreadV2 230pub struct GetPostThreadV2Request; 231impl jacquard_common::xrpc::XrpcEndpoint for GetPostThreadV2Request { 232 const PATH: &'static str = "/xrpc/app.bsky.unspecced.getPostThreadV2"; 233 const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 234 type Request<'de> = GetPostThreadV2<'de>; 235 type Response = GetPostThreadV2Response; 236} 237 238#[jacquard_derive::lexicon] 239#[derive( 240 serde::Serialize, 241 serde::Deserialize, 242 Debug, 243 Clone, 244 PartialEq, 245 Eq, 246 jacquard_derive::IntoStatic 247)] 248#[serde(rename_all = "camelCase")] 249pub struct ThreadItem<'a> { 250 /// The nesting level of this item in the thread. Depth 0 means the anchor item. Items above have negative depths, items below have positive depths. 251 pub depth: i64, 252 #[serde(borrow)] 253 pub uri: jacquard_common::types::string::AtUri<'a>, 254 #[serde(borrow)] 255 pub value: ThreadItemValue<'a>, 256} 257 258pub mod thread_item_state { 259 260 pub use crate::builder_types::{Set, Unset, IsSet, IsUnset}; 261 #[allow(unused)] 262 use ::core::marker::PhantomData; 263 mod sealed { 264 pub trait Sealed {} 265 } 266 /// State trait tracking which required fields have been set 267 pub trait State: sealed::Sealed { 268 type Value; 269 type Uri; 270 type Depth; 271 } 272 /// Empty state - all required fields are unset 273 pub struct Empty(()); 274 impl sealed::Sealed for Empty {} 275 impl State for Empty { 276 type Value = Unset; 277 type Uri = Unset; 278 type Depth = Unset; 279 } 280 ///State transition - sets the `value` field to Set 281 pub struct SetValue<S: State = Empty>(PhantomData<fn() -> S>); 282 impl<S: State> sealed::Sealed for SetValue<S> {} 283 impl<S: State> State for SetValue<S> { 284 type Value = Set<members::value>; 285 type Uri = S::Uri; 286 type Depth = S::Depth; 287 } 288 ///State transition - sets the `uri` field to Set 289 pub struct SetUri<S: State = Empty>(PhantomData<fn() -> S>); 290 impl<S: State> sealed::Sealed for SetUri<S> {} 291 impl<S: State> State for SetUri<S> { 292 type Value = S::Value; 293 type Uri = Set<members::uri>; 294 type Depth = S::Depth; 295 } 296 ///State transition - sets the `depth` field to Set 297 pub struct SetDepth<S: State = Empty>(PhantomData<fn() -> S>); 298 impl<S: State> sealed::Sealed for SetDepth<S> {} 299 impl<S: State> State for SetDepth<S> { 300 type Value = S::Value; 301 type Uri = S::Uri; 302 type Depth = Set<members::depth>; 303 } 304 /// Marker types for field names 305 #[allow(non_camel_case_types)] 306 pub mod members { 307 ///Marker type for the `value` field 308 pub struct value(()); 309 ///Marker type for the `uri` field 310 pub struct uri(()); 311 ///Marker type for the `depth` field 312 pub struct depth(()); 313 } 314} 315 316/// Builder for constructing an instance of this type 317pub struct ThreadItemBuilder<'a, S: thread_item_state::State> { 318 _phantom_state: ::core::marker::PhantomData<fn() -> S>, 319 __unsafe_private_named: ( 320 ::core::option::Option<i64>, 321 ::core::option::Option<jacquard_common::types::string::AtUri<'a>>, 322 ::core::option::Option<ThreadItemValue<'a>>, 323 ), 324 _phantom: ::core::marker::PhantomData<&'a ()>, 325} 326 327impl<'a> ThreadItem<'a> { 328 /// Create a new builder for this type 329 pub fn new() -> ThreadItemBuilder<'a, thread_item_state::Empty> { 330 ThreadItemBuilder::new() 331 } 332} 333 334impl<'a> ThreadItemBuilder<'a, thread_item_state::Empty> { 335 /// Create a new builder with all fields unset 336 pub fn new() -> Self { 337 ThreadItemBuilder { 338 _phantom_state: ::core::marker::PhantomData, 339 __unsafe_private_named: (None, None, None), 340 _phantom: ::core::marker::PhantomData, 341 } 342 } 343} 344 345impl<'a, S> ThreadItemBuilder<'a, S> 346where 347 S: thread_item_state::State, 348 S::Depth: thread_item_state::IsUnset, 349{ 350 /// Set the `depth` field (required) 351 pub fn depth( 352 mut self, 353 value: impl Into<i64>, 354 ) -> ThreadItemBuilder<'a, thread_item_state::SetDepth<S>> { 355 self.__unsafe_private_named.0 = ::core::option::Option::Some(value.into()); 356 ThreadItemBuilder { 357 _phantom_state: ::core::marker::PhantomData, 358 __unsafe_private_named: self.__unsafe_private_named, 359 _phantom: ::core::marker::PhantomData, 360 } 361 } 362} 363 364impl<'a, S> ThreadItemBuilder<'a, S> 365where 366 S: thread_item_state::State, 367 S::Uri: thread_item_state::IsUnset, 368{ 369 /// Set the `uri` field (required) 370 pub fn uri( 371 mut self, 372 value: impl Into<jacquard_common::types::string::AtUri<'a>>, 373 ) -> ThreadItemBuilder<'a, thread_item_state::SetUri<S>> { 374 self.__unsafe_private_named.1 = ::core::option::Option::Some(value.into()); 375 ThreadItemBuilder { 376 _phantom_state: ::core::marker::PhantomData, 377 __unsafe_private_named: self.__unsafe_private_named, 378 _phantom: ::core::marker::PhantomData, 379 } 380 } 381} 382 383impl<'a, S> ThreadItemBuilder<'a, S> 384where 385 S: thread_item_state::State, 386 S::Value: thread_item_state::IsUnset, 387{ 388 /// Set the `value` field (required) 389 pub fn value( 390 mut self, 391 value: impl Into<ThreadItemValue<'a>>, 392 ) -> ThreadItemBuilder<'a, thread_item_state::SetValue<S>> { 393 self.__unsafe_private_named.2 = ::core::option::Option::Some(value.into()); 394 ThreadItemBuilder { 395 _phantom_state: ::core::marker::PhantomData, 396 __unsafe_private_named: self.__unsafe_private_named, 397 _phantom: ::core::marker::PhantomData, 398 } 399 } 400} 401 402impl<'a, S> ThreadItemBuilder<'a, S> 403where 404 S: thread_item_state::State, 405 S::Value: thread_item_state::IsSet, 406 S::Uri: thread_item_state::IsSet, 407 S::Depth: thread_item_state::IsSet, 408{ 409 /// Build the final struct 410 pub fn build(self) -> ThreadItem<'a> { 411 ThreadItem { 412 depth: self.__unsafe_private_named.0.unwrap(), 413 uri: self.__unsafe_private_named.1.unwrap(), 414 value: self.__unsafe_private_named.2.unwrap(), 415 extra_data: Default::default(), 416 } 417 } 418 /// Build the final struct with custom extra_data 419 pub fn build_with_data( 420 self, 421 extra_data: std::collections::BTreeMap< 422 jacquard_common::smol_str::SmolStr, 423 jacquard_common::types::value::Data<'a>, 424 >, 425 ) -> ThreadItem<'a> { 426 ThreadItem { 427 depth: self.__unsafe_private_named.0.unwrap(), 428 uri: self.__unsafe_private_named.1.unwrap(), 429 value: self.__unsafe_private_named.2.unwrap(), 430 extra_data: Some(extra_data), 431 } 432 } 433} 434 435#[jacquard_derive::open_union] 436#[derive( 437 serde::Serialize, 438 serde::Deserialize, 439 Debug, 440 Clone, 441 PartialEq, 442 Eq, 443 jacquard_derive::IntoStatic 444)] 445#[serde(tag = "$type")] 446#[serde(bound(deserialize = "'de: 'a"))] 447pub enum ThreadItemValue<'a> { 448 #[serde(rename = "app.bsky.unspecced.defs#threadItemPost")] 449 ThreadItemPost(Box<crate::app_bsky::unspecced::ThreadItemPost<'a>>), 450 #[serde(rename = "app.bsky.unspecced.defs#threadItemNoUnauthenticated")] 451 ThreadItemNoUnauthenticated( 452 Box<crate::app_bsky::unspecced::ThreadItemNoUnauthenticated<'a>>, 453 ), 454 #[serde(rename = "app.bsky.unspecced.defs#threadItemNotFound")] 455 ThreadItemNotFound(Box<crate::app_bsky::unspecced::ThreadItemNotFound<'a>>), 456 #[serde(rename = "app.bsky.unspecced.defs#threadItemBlocked")] 457 ThreadItemBlocked(Box<crate::app_bsky::unspecced::ThreadItemBlocked<'a>>), 458} 459 460fn lexicon_doc_app_bsky_unspecced_getPostThreadV2() -> ::jacquard_lexicon::lexicon::LexiconDoc< 461 'static, 462> { 463 ::jacquard_lexicon::lexicon::LexiconDoc { 464 lexicon: ::jacquard_lexicon::lexicon::Lexicon::Lexicon1, 465 id: ::jacquard_common::CowStr::new_static("app.bsky.unspecced.getPostThreadV2"), 466 revision: None, 467 description: None, 468 defs: { 469 let mut map = ::alloc::collections::BTreeMap::new(); 470 map.insert( 471 ::jacquard_common::smol_str::SmolStr::new_static("main"), 472 ::jacquard_lexicon::lexicon::LexUserType::XrpcQuery(::jacquard_lexicon::lexicon::LexXrpcQuery { 473 description: None, 474 parameters: Some( 475 ::jacquard_lexicon::lexicon::LexXrpcQueryParameter::Params(::jacquard_lexicon::lexicon::LexXrpcParameters { 476 description: None, 477 required: Some( 478 vec![ 479 ::jacquard_common::smol_str::SmolStr::new_static("anchor") 480 ], 481 ), 482 properties: { 483 #[allow(unused_mut)] 484 let mut map = ::alloc::collections::BTreeMap::new(); 485 map.insert( 486 ::jacquard_common::smol_str::SmolStr::new_static("above"), 487 ::jacquard_lexicon::lexicon::LexXrpcParametersProperty::Boolean(::jacquard_lexicon::lexicon::LexBoolean { 488 description: None, 489 default: None, 490 r#const: None, 491 }), 492 ); 493 map.insert( 494 ::jacquard_common::smol_str::SmolStr::new_static("anchor"), 495 ::jacquard_lexicon::lexicon::LexXrpcParametersProperty::String(::jacquard_lexicon::lexicon::LexString { 496 description: Some( 497 ::jacquard_common::CowStr::new_static( 498 "Reference (AT-URI) to post record. This is the anchor post, and the thread will be built around it. It can be any post in the tree, not necessarily a root post.", 499 ), 500 ), 501 format: Some( 502 ::jacquard_lexicon::lexicon::LexStringFormat::AtUri, 503 ), 504 default: None, 505 min_length: None, 506 max_length: None, 507 min_graphemes: None, 508 max_graphemes: None, 509 r#enum: None, 510 r#const: None, 511 known_values: None, 512 }), 513 ); 514 map.insert( 515 ::jacquard_common::smol_str::SmolStr::new_static("below"), 516 ::jacquard_lexicon::lexicon::LexXrpcParametersProperty::Integer(::jacquard_lexicon::lexicon::LexInteger { 517 description: None, 518 default: None, 519 minimum: None, 520 maximum: None, 521 r#enum: None, 522 r#const: None, 523 }), 524 ); 525 map.insert( 526 ::jacquard_common::smol_str::SmolStr::new_static( 527 "branchingFactor", 528 ), 529 ::jacquard_lexicon::lexicon::LexXrpcParametersProperty::Integer(::jacquard_lexicon::lexicon::LexInteger { 530 description: None, 531 default: None, 532 minimum: None, 533 maximum: None, 534 r#enum: None, 535 r#const: None, 536 }), 537 ); 538 map.insert( 539 ::jacquard_common::smol_str::SmolStr::new_static("sort"), 540 ::jacquard_lexicon::lexicon::LexXrpcParametersProperty::String(::jacquard_lexicon::lexicon::LexString { 541 description: Some( 542 ::jacquard_common::CowStr::new_static( 543 "Sorting for the thread replies.", 544 ), 545 ), 546 format: None, 547 default: None, 548 min_length: None, 549 max_length: None, 550 min_graphemes: None, 551 max_graphemes: None, 552 r#enum: None, 553 r#const: None, 554 known_values: None, 555 }), 556 ); 557 map 558 }, 559 }), 560 ), 561 output: None, 562 errors: None, 563 }), 564 ); 565 map.insert( 566 ::jacquard_common::smol_str::SmolStr::new_static("threadItem"), 567 ::jacquard_lexicon::lexicon::LexUserType::Object(::jacquard_lexicon::lexicon::LexObject { 568 description: None, 569 required: Some( 570 vec![ 571 ::jacquard_common::smol_str::SmolStr::new_static("uri"), 572 ::jacquard_common::smol_str::SmolStr::new_static("depth"), 573 ::jacquard_common::smol_str::SmolStr::new_static("value") 574 ], 575 ), 576 nullable: None, 577 properties: { 578 #[allow(unused_mut)] 579 let mut map = ::alloc::collections::BTreeMap::new(); 580 map.insert( 581 ::jacquard_common::smol_str::SmolStr::new_static("depth"), 582 ::jacquard_lexicon::lexicon::LexObjectProperty::Integer(::jacquard_lexicon::lexicon::LexInteger { 583 description: None, 584 default: None, 585 minimum: None, 586 maximum: None, 587 r#enum: None, 588 r#const: None, 589 }), 590 ); 591 map.insert( 592 ::jacquard_common::smol_str::SmolStr::new_static("uri"), 593 ::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString { 594 description: None, 595 format: Some( 596 ::jacquard_lexicon::lexicon::LexStringFormat::AtUri, 597 ), 598 default: None, 599 min_length: None, 600 max_length: None, 601 min_graphemes: None, 602 max_graphemes: None, 603 r#enum: None, 604 r#const: None, 605 known_values: None, 606 }), 607 ); 608 map.insert( 609 ::jacquard_common::smol_str::SmolStr::new_static("value"), 610 ::jacquard_lexicon::lexicon::LexObjectProperty::Union(::jacquard_lexicon::lexicon::LexRefUnion { 611 description: None, 612 refs: vec![ 613 ::jacquard_common::CowStr::new_static("app.bsky.unspecced.defs#threadItemPost"), 614 ::jacquard_common::CowStr::new_static("app.bsky.unspecced.defs#threadItemNoUnauthenticated"), 615 ::jacquard_common::CowStr::new_static("app.bsky.unspecced.defs#threadItemNotFound"), 616 ::jacquard_common::CowStr::new_static("app.bsky.unspecced.defs#threadItemBlocked") 617 ], 618 closed: None, 619 }), 620 ); 621 map 622 }, 623 }), 624 ); 625 map 626 }, 627 } 628} 629 630impl<'a> ::jacquard_lexicon::schema::LexiconSchema for ThreadItem<'a> { 631 fn nsid() -> &'static str { 632 "app.bsky.unspecced.getPostThreadV2" 633 } 634 fn def_name() -> &'static str { 635 "threadItem" 636 } 637 fn lexicon_doc() -> ::jacquard_lexicon::lexicon::LexiconDoc<'static> { 638 lexicon_doc_app_bsky_unspecced_getPostThreadV2() 639 } 640 fn validate( 641 &self, 642 ) -> ::core::result::Result<(), ::jacquard_lexicon::validation::ConstraintError> { 643 Ok(()) 644 } 645}