#[allow(unused_imports)]
use alloc::collections::BTreeMap;
#[allow(unused_imports)]
use core::marker::PhantomData;
use jacquard_common::{CowStr, BosStr, DefaultStr, FromStaticStr};
#[allow(unused_imports)]
use jacquard_common::deps::codegen::unicode_segmentation::UnicodeSegmentation;
use jacquard_common::deps::smol_str::SmolStr;
use jacquard_common::types::string::{AtUri, UriValue};
use jacquard_common::types::value::Data;
use jacquard_derive::IntoStatic;
use jacquard_lexicon::lexicon::LexiconDoc;
use jacquard_lexicon::schema::LexiconSchema;
#[allow(unused_imports)]
use jacquard_lexicon::validation::{ConstraintError, ValidationPath};
use serde::{Serialize, Deserialize};
use crate::parts_page::mention::search;
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
#[serde(rename_all = "camelCase", bound(deserialize = "S: Deserialize<'de> + BosStr"))]
pub struct AspectRatio<S: BosStr = DefaultStr> {
pub height: i64,
pub width: i64,
#[serde(flatten, default, skip_serializing_if = "Option::is_none")]
pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
#[serde(rename_all = "camelCase", bound(deserialize = "S: Deserialize<'de> + BosStr"))]
pub struct EmbedInfo<S: BosStr = DefaultStr> {
#[serde(skip_serializing_if = "Option::is_none")]
pub aspect_ratio: Option<search::AspectRatio<S>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub height: Option<i64>,
pub src: UriValue<S>,
#[serde(skip_serializing_if = "Option::is_none")]
pub width: Option<i64>,
#[serde(flatten, default, skip_serializing_if = "Option::is_none")]
pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
#[serde(rename_all = "camelCase", bound(deserialize = "S: Deserialize<'de> + BosStr"))]
pub struct Search<S: BosStr = DefaultStr> {
#[serde(default = "_default_limit")]
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub scope: Option<S>,
pub search: S,
pub service: AtUri<S>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
#[serde(rename_all = "camelCase", bound(deserialize = "S: Deserialize<'de> + BosStr"))]
pub struct SearchOutput<S: BosStr = DefaultStr> {
pub results: Vec<search::SearchResult<S>>,
#[serde(flatten, default, skip_serializing_if = "Option::is_none")]
pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic, Default)]
#[serde(rename_all = "camelCase", bound(deserialize = "S: Deserialize<'de> + BosStr"))]
pub struct MentionLabel<S: BosStr = DefaultStr> {
#[serde(skip_serializing_if = "Option::is_none")]
pub text: Option<S>,
#[serde(flatten, default, skip_serializing_if = "Option::is_none")]
pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic, Default)]
#[serde(rename_all = "camelCase", bound(deserialize = "S: Deserialize<'de> + BosStr"))]
pub struct SearchResult<S: BosStr = DefaultStr> {
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<S>,
#[serde(skip_serializing_if = "Option::is_none")]
pub embed: Option<search::EmbedInfo<S>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub href: Option<UriValue<S>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub icon: Option<UriValue<S>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub labels: Option<Vec<search::MentionLabel<S>>>,
pub name: S,
#[serde(skip_serializing_if = "Option::is_none")]
pub subscope: Option<search::SubscopeInfo<S>>,
pub uri: S,
#[serde(flatten, default, skip_serializing_if = "Option::is_none")]
pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic, Default)]
#[serde(rename_all = "camelCase", bound(deserialize = "S: Deserialize<'de> + BosStr"))]
pub struct SubscopeInfo<S: BosStr = DefaultStr> {
pub label: S,
pub scope: S,
#[serde(flatten, default, skip_serializing_if = "Option::is_none")]
pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
}
impl<S: BosStr> LexiconSchema for AspectRatio<S> {
fn nsid() -> &'static str {
"parts.page.mention.search"
}
fn def_name() -> &'static str {
"aspectRatio"
}
fn lexicon_doc() -> LexiconDoc<'static> {
lexicon_doc_parts_page_mention_search()
}
fn validate(&self) -> Result<(), ConstraintError> {
Ok(())
}
}
impl<S: BosStr> LexiconSchema for EmbedInfo<S> {
fn nsid() -> &'static str {
"parts.page.mention.search"
}
fn def_name() -> &'static str {
"embedInfo"
}
fn lexicon_doc() -> LexiconDoc<'static> {
lexicon_doc_parts_page_mention_search()
}
fn validate(&self) -> Result<(), ConstraintError> {
if let Some(ref value) = self.height {
if *value > 3200i64 {
return Err(ConstraintError::Maximum {
path: ValidationPath::from_field("height"),
max: 3200i64,
actual: *value,
});
}
}
if let Some(ref value) = self.height {
if *value < 16i64 {
return Err(ConstraintError::Minimum {
path: ValidationPath::from_field("height"),
min: 16i64,
actual: *value,
});
}
}
if let Some(ref value) = self.width {
if *value > 3200i64 {
return Err(ConstraintError::Maximum {
path: ValidationPath::from_field("width"),
max: 3200i64,
actual: *value,
});
}
}
if let Some(ref value) = self.width {
if *value < 16i64 {
return Err(ConstraintError::Minimum {
path: ValidationPath::from_field("width"),
min: 16i64,
actual: *value,
});
}
}
Ok(())
}
}
pub struct SearchResponse;
impl jacquard_common::xrpc::XrpcResp for SearchResponse {
const NSID: &'static str = "parts.page.mention.search";
const ENCODING: &'static str = "application/json";
type Output<S: BosStr> = SearchOutput<S>;
type Err = jacquard_common::xrpc::GenericError;
}
impl<S: BosStr> jacquard_common::xrpc::XrpcRequest for Search<S> {
const NSID: &'static str = "parts.page.mention.search";
const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query;
type Response = SearchResponse;
}
pub struct SearchRequest;
impl jacquard_common::xrpc::XrpcEndpoint for SearchRequest {
const PATH: &'static str = "/xrpc/parts.page.mention.search";
const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query;
type Request<S: BosStr> = Search<S>;
type Response = SearchResponse;
}
impl<S: BosStr> LexiconSchema for MentionLabel<S> {
fn nsid() -> &'static str {
"parts.page.mention.search"
}
fn def_name() -> &'static str {
"mentionLabel"
}
fn lexicon_doc() -> LexiconDoc<'static> {
lexicon_doc_parts_page_mention_search()
}
fn validate(&self) -> Result<(), ConstraintError> {
Ok(())
}
}
impl<S: BosStr> LexiconSchema for SearchResult<S> {
fn nsid() -> &'static str {
"parts.page.mention.search"
}
fn def_name() -> &'static str {
"result"
}
fn lexicon_doc() -> LexiconDoc<'static> {
lexicon_doc_parts_page_mention_search()
}
fn validate(&self) -> Result<(), ConstraintError> {
Ok(())
}
}
impl<S: BosStr> LexiconSchema for SubscopeInfo<S> {
fn nsid() -> &'static str {
"parts.page.mention.search"
}
fn def_name() -> &'static str {
"subscopeInfo"
}
fn lexicon_doc() -> LexiconDoc<'static> {
lexicon_doc_parts_page_mention_search()
}
fn validate(&self) -> Result<(), ConstraintError> {
{
let value = &self.label;
#[allow(unused_comparisons)]
if <str>::len(value.as_ref()) > 100usize {
return Err(ConstraintError::MaxLength {
path: ValidationPath::from_field("label"),
max: 100usize,
actual: <str>::len(value.as_ref()),
});
}
}
Ok(())
}
}
pub mod aspect_ratio_state {
pub use crate::builder_types::{Set, Unset, IsSet, IsUnset};
#[allow(unused)]
use ::core::marker::PhantomData;
mod sealed {
pub trait Sealed {}
}
pub trait State: sealed::Sealed {
type Height;
type Width;
}
pub struct Empty(());
impl sealed::Sealed for Empty {}
impl State for Empty {
type Height = Unset;
type Width = Unset;
}
pub struct SetHeight<St: State = Empty>(PhantomData<fn() -> St>);
impl<St: State> sealed::Sealed for SetHeight<St> {}
impl<St: State> State for SetHeight<St> {
type Height = Set<members::height>;
type Width = St::Width;
}
pub struct SetWidth<St: State = Empty>(PhantomData<fn() -> St>);
impl<St: State> sealed::Sealed for SetWidth<St> {}
impl<St: State> State for SetWidth<St> {
type Height = St::Height;
type Width = Set<members::width>;
}
#[allow(non_camel_case_types)]
pub mod members {
pub struct height(());
pub struct width(());
}
}
pub struct AspectRatioBuilder<St: aspect_ratio_state::State, S: BosStr = DefaultStr> {
_state: PhantomData<fn() -> St>,
_fields: (Option<i64>, Option<i64>),
_type: PhantomData<fn() -> S>,
}
impl AspectRatio<DefaultStr> {
pub fn new() -> AspectRatioBuilder<aspect_ratio_state::Empty, DefaultStr> {
AspectRatioBuilder::new()
}
}
impl<S: BosStr> AspectRatio<S> {
pub fn builder() -> AspectRatioBuilder<aspect_ratio_state::Empty, S> {
AspectRatioBuilder::builder()
}
}
impl AspectRatioBuilder<aspect_ratio_state::Empty, DefaultStr> {
pub fn new() -> Self {
AspectRatioBuilder {
_state: PhantomData,
_fields: (None, None),
_type: PhantomData,
}
}
}
impl<S: BosStr> AspectRatioBuilder<aspect_ratio_state::Empty, S> {
pub fn builder() -> Self {
AspectRatioBuilder {
_state: PhantomData,
_fields: (None, None),
_type: PhantomData,
}
}
}
impl<St, S: BosStr> AspectRatioBuilder<St, S>
where
St: aspect_ratio_state::State,
St::Height: aspect_ratio_state::IsUnset,
{
pub fn height(
mut self,
value: impl Into<i64>,
) -> AspectRatioBuilder<aspect_ratio_state::SetHeight<St>, S> {
self._fields.0 = Option::Some(value.into());
AspectRatioBuilder {
_state: PhantomData,
_fields: self._fields,
_type: PhantomData,
}
}
}
impl<St, S: BosStr> AspectRatioBuilder<St, S>
where
St: aspect_ratio_state::State,
St::Width: aspect_ratio_state::IsUnset,
{
pub fn width(
mut self,
value: impl Into<i64>,
) -> AspectRatioBuilder<aspect_ratio_state::SetWidth<St>, S> {
self._fields.1 = Option::Some(value.into());
AspectRatioBuilder {
_state: PhantomData,
_fields: self._fields,
_type: PhantomData,
}
}
}
impl<St, S: BosStr> AspectRatioBuilder<St, S>
where
St: aspect_ratio_state::State,
St::Height: aspect_ratio_state::IsSet,
St::Width: aspect_ratio_state::IsSet,
{
pub fn build(self) -> AspectRatio<S> {
AspectRatio {
height: self._fields.0.unwrap(),
width: self._fields.1.unwrap(),
extra_data: Default::default(),
}
}
pub fn build_with_data(
self,
extra_data: BTreeMap<SmolStr, Data<S>>,
) -> AspectRatio<S> {
AspectRatio {
height: self._fields.0.unwrap(),
width: self._fields.1.unwrap(),
extra_data: Some(extra_data),
}
}
}
fn lexicon_doc_parts_page_mention_search() -> LexiconDoc<'static> {
#[allow(unused_imports)]
use jacquard_common::{CowStr, deps::smol_str::SmolStr, types::blob::MimeType};
use jacquard_lexicon::lexicon::*;
use alloc::collections::BTreeMap;
LexiconDoc {
lexicon: Lexicon::Lexicon1,
id: CowStr::new_static("parts.page.mention.search"),
defs: {
let mut map = BTreeMap::new();
map.insert(
SmolStr::new_static("aspectRatio"),
LexUserType::Object(LexObject {
required: Some(
vec![SmolStr::new_static("width"), SmolStr::new_static("height")],
),
properties: {
#[allow(unused_mut)]
let mut map = BTreeMap::new();
map.insert(
SmolStr::new_static("height"),
LexObjectProperty::Integer(LexInteger {
..Default::default()
}),
);
map.insert(
SmolStr::new_static("width"),
LexObjectProperty::Integer(LexInteger {
..Default::default()
}),
);
map
},
..Default::default()
}),
);
map.insert(
SmolStr::new_static("embedInfo"),
LexUserType::Object(LexObject {
required: Some(vec![SmolStr::new_static("src")]),
properties: {
#[allow(unused_mut)]
let mut map = BTreeMap::new();
map.insert(
SmolStr::new_static("aspectRatio"),
LexObjectProperty::Ref(LexRef {
r#ref: CowStr::new_static("#aspectRatio"),
..Default::default()
}),
);
map.insert(
SmolStr::new_static("height"),
LexObjectProperty::Integer(LexInteger {
minimum: Some(16i64),
maximum: Some(3200i64),
..Default::default()
}),
);
map.insert(
SmolStr::new_static("src"),
LexObjectProperty::String(LexString {
description: Some(
CowStr::new_static("Source URL for the iframe embed"),
),
format: Some(LexStringFormat::Uri),
..Default::default()
}),
);
map.insert(
SmolStr::new_static("width"),
LexObjectProperty::Integer(LexInteger {
minimum: Some(16i64),
maximum: Some(3200i64),
..Default::default()
}),
);
map
},
..Default::default()
}),
);
map.insert(
SmolStr::new_static("main"),
LexUserType::XrpcQuery(LexXrpcQuery {
parameters: Some(
LexXrpcQueryParameter::Params(LexXrpcParameters {
required: Some(
vec![
SmolStr::new_static("service"),
SmolStr::new_static("search")
],
),
properties: {
#[allow(unused_mut)]
let mut map = BTreeMap::new();
map.insert(
SmolStr::new_static("limit"),
LexXrpcParametersProperty::Integer(LexInteger {
..Default::default()
}),
);
map.insert(
SmolStr::new_static("scope"),
LexXrpcParametersProperty::String(LexString {
description: Some(
CowStr::new_static(
"Optional scope identifier to narrow results within a service, as returned by a previous result's subscope.scope field",
),
),
..Default::default()
}),
);
map.insert(
SmolStr::new_static("search"),
LexXrpcParametersProperty::String(LexString {
description: Some(
CowStr::new_static("Search query string"),
),
..Default::default()
}),
);
map.insert(
SmolStr::new_static("service"),
LexXrpcParametersProperty::String(LexString {
description: Some(
CowStr::new_static(
"AT URI of the parts.page.mention.service record identifying which service to query",
),
),
format: Some(LexStringFormat::AtUri),
..Default::default()
}),
);
map
},
..Default::default()
}),
),
..Default::default()
}),
);
map.insert(
SmolStr::new_static("mentionLabel"),
LexUserType::Object(LexObject {
properties: {
#[allow(unused_mut)]
let mut map = BTreeMap::new();
map.insert(
SmolStr::new_static("text"),
LexObjectProperty::String(LexString { ..Default::default() }),
);
map
},
..Default::default()
}),
);
map.insert(
SmolStr::new_static("result"),
LexUserType::Object(LexObject {
required: Some(
vec![SmolStr::new_static("uri"), SmolStr::new_static("name")],
),
properties: {
#[allow(unused_mut)]
let mut map = BTreeMap::new();
map.insert(
SmolStr::new_static("description"),
LexObjectProperty::String(LexString {
description: Some(
CowStr::new_static("A description for the mentioned entity"),
),
..Default::default()
}),
);
map.insert(
SmolStr::new_static("embed"),
LexObjectProperty::Ref(LexRef {
r#ref: CowStr::new_static("#embedInfo"),
..Default::default()
}),
);
map.insert(
SmolStr::new_static("href"),
LexObjectProperty::String(LexString {
description: Some(
CowStr::new_static(
"Optional web URL for the mentioned entity",
),
),
format: Some(LexStringFormat::Uri),
..Default::default()
}),
);
map.insert(
SmolStr::new_static("icon"),
LexObjectProperty::String(LexString {
description: Some(
CowStr::new_static(
"Optional icon URL for the mentioned entity, displayed next to the mention",
),
),
format: Some(LexStringFormat::Uri),
..Default::default()
}),
);
map.insert(
SmolStr::new_static("labels"),
LexObjectProperty::Array(LexArray {
description: Some(
CowStr::new_static(
"A set of labels to be rendered with the mentionedEntity",
),
),
items: LexArrayItem::Ref(LexRef {
r#ref: CowStr::new_static("#mentionLabel"),
..Default::default()
}),
..Default::default()
}),
);
map.insert(
SmolStr::new_static("name"),
LexObjectProperty::String(LexString {
description: Some(
CowStr::new_static("Display name for the mentioned entity"),
),
..Default::default()
}),
);
map.insert(
SmolStr::new_static("subscope"),
LexObjectProperty::Ref(LexRef {
r#ref: CowStr::new_static("#subscopeInfo"),
..Default::default()
}),
);
map.insert(
SmolStr::new_static("uri"),
LexObjectProperty::String(LexString {
description: Some(
CowStr::new_static("Identifier for the mentioned entity"),
),
..Default::default()
}),
);
map
},
..Default::default()
}),
);
map.insert(
SmolStr::new_static("subscopeInfo"),
LexUserType::Object(LexObject {
required: Some(
vec![SmolStr::new_static("scope"), SmolStr::new_static("label")],
),
properties: {
#[allow(unused_mut)]
let mut map = BTreeMap::new();
map.insert(
SmolStr::new_static("label"),
LexObjectProperty::String(LexString {
description: Some(
CowStr::new_static(
"Display label for the scope-down button (e.g. 'Posts', 'Tracks')",
),
),
max_length: Some(100usize),
..Default::default()
}),
);
map.insert(
SmolStr::new_static("scope"),
LexObjectProperty::String(LexString {
description: Some(
CowStr::new_static(
"Scope identifier passed back to the service in subsequent search queries",
),
),
..Default::default()
}),
);
map
},
..Default::default()
}),
);
map
},
..Default::default()
}
}
pub mod embed_info_state {
pub use crate::builder_types::{Set, Unset, IsSet, IsUnset};
#[allow(unused)]
use ::core::marker::PhantomData;
mod sealed {
pub trait Sealed {}
}
pub trait State: sealed::Sealed {
type Src;
}
pub struct Empty(());
impl sealed::Sealed for Empty {}
impl State for Empty {
type Src = Unset;
}
pub struct SetSrc<St: State = Empty>(PhantomData<fn() -> St>);
impl<St: State> sealed::Sealed for SetSrc<St> {}
impl<St: State> State for SetSrc<St> {
type Src = Set<members::src>;
}
#[allow(non_camel_case_types)]
pub mod members {
pub struct src(());
}
}
pub struct EmbedInfoBuilder<St: embed_info_state::State, S: BosStr = DefaultStr> {
_state: PhantomData<fn() -> St>,
_fields: (
Option<search::AspectRatio<S>>,
Option<i64>,
Option<UriValue<S>>,
Option<i64>,
),
_type: PhantomData<fn() -> S>,
}
impl EmbedInfo<DefaultStr> {
pub fn new() -> EmbedInfoBuilder<embed_info_state::Empty, DefaultStr> {
EmbedInfoBuilder::new()
}
}
impl<S: BosStr> EmbedInfo<S> {
pub fn builder() -> EmbedInfoBuilder<embed_info_state::Empty, S> {
EmbedInfoBuilder::builder()
}
}
impl EmbedInfoBuilder<embed_info_state::Empty, DefaultStr> {
pub fn new() -> Self {
EmbedInfoBuilder {
_state: PhantomData,
_fields: (None, None, None, None),
_type: PhantomData,
}
}
}
impl<S: BosStr> EmbedInfoBuilder<embed_info_state::Empty, S> {
pub fn builder() -> Self {
EmbedInfoBuilder {
_state: PhantomData,
_fields: (None, None, None, None),
_type: PhantomData,
}
}
}
impl<St: embed_info_state::State, S: BosStr> EmbedInfoBuilder<St, S> {
pub fn aspect_ratio(
mut self,
value: impl Into<Option<search::AspectRatio<S>>>,
) -> Self {
self._fields.0 = value.into();
self
}
pub fn maybe_aspect_ratio(mut self, value: Option<search::AspectRatio<S>>) -> Self {
self._fields.0 = value;
self
}
}
impl<St: embed_info_state::State, S: BosStr> EmbedInfoBuilder<St, S> {
pub fn height(mut self, value: impl Into<Option<i64>>) -> Self {
self._fields.1 = value.into();
self
}
pub fn maybe_height(mut self, value: Option<i64>) -> Self {
self._fields.1 = value;
self
}
}
impl<St, S: BosStr> EmbedInfoBuilder<St, S>
where
St: embed_info_state::State,
St::Src: embed_info_state::IsUnset,
{
pub fn src(
mut self,
value: impl Into<UriValue<S>>,
) -> EmbedInfoBuilder<embed_info_state::SetSrc<St>, S> {
self._fields.2 = Option::Some(value.into());
EmbedInfoBuilder {
_state: PhantomData,
_fields: self._fields,
_type: PhantomData,
}
}
}
impl<St: embed_info_state::State, S: BosStr> EmbedInfoBuilder<St, S> {
pub fn width(mut self, value: impl Into<Option<i64>>) -> Self {
self._fields.3 = value.into();
self
}
pub fn maybe_width(mut self, value: Option<i64>) -> Self {
self._fields.3 = value;
self
}
}
impl<St, S: BosStr> EmbedInfoBuilder<St, S>
where
St: embed_info_state::State,
St::Src: embed_info_state::IsSet,
{
pub fn build(self) -> EmbedInfo<S> {
EmbedInfo {
aspect_ratio: self._fields.0,
height: self._fields.1,
src: self._fields.2.unwrap(),
width: self._fields.3,
extra_data: Default::default(),
}
}
pub fn build_with_data(
self,
extra_data: BTreeMap<SmolStr, Data<S>>,
) -> EmbedInfo<S> {
EmbedInfo {
aspect_ratio: self._fields.0,
height: self._fields.1,
src: self._fields.2.unwrap(),
width: self._fields.3,
extra_data: Some(extra_data),
}
}
}
fn _default_limit() -> Option<i64> {
Some(20i64)
}
pub mod search_state {
pub use crate::builder_types::{Set, Unset, IsSet, IsUnset};
#[allow(unused)]
use ::core::marker::PhantomData;
mod sealed {
pub trait Sealed {}
}
pub trait State: sealed::Sealed {
type Search;
type Service;
}
pub struct Empty(());
impl sealed::Sealed for Empty {}
impl State for Empty {
type Search = Unset;
type Service = Unset;
}
pub struct SetSearch<St: State = Empty>(PhantomData<fn() -> St>);
impl<St: State> sealed::Sealed for SetSearch<St> {}
impl<St: State> State for SetSearch<St> {
type Search = Set<members::search>;
type Service = St::Service;
}
pub struct SetService<St: State = Empty>(PhantomData<fn() -> St>);
impl<St: State> sealed::Sealed for SetService<St> {}
impl<St: State> State for SetService<St> {
type Search = St::Search;
type Service = Set<members::service>;
}
#[allow(non_camel_case_types)]
pub mod members {
pub struct search(());
pub struct service(());
}
}
pub struct SearchBuilder<St: search_state::State, S: BosStr = DefaultStr> {
_state: PhantomData<fn() -> St>,
_fields: (Option<i64>, Option<S>, Option<S>, Option<AtUri<S>>),
_type: PhantomData<fn() -> S>,
}
impl Search<DefaultStr> {
pub fn new() -> SearchBuilder<search_state::Empty, DefaultStr> {
SearchBuilder::new()
}
}
impl<S: BosStr> Search<S> {
pub fn builder() -> SearchBuilder<search_state::Empty, S> {
SearchBuilder::builder()
}
}
impl SearchBuilder<search_state::Empty, DefaultStr> {
pub fn new() -> Self {
SearchBuilder {
_state: PhantomData,
_fields: (None, None, None, None),
_type: PhantomData,
}
}
}
impl<S: BosStr> SearchBuilder<search_state::Empty, S> {
pub fn builder() -> Self {
SearchBuilder {
_state: PhantomData,
_fields: (None, None, None, None),
_type: PhantomData,
}
}
}
impl<St: search_state::State, S: BosStr> SearchBuilder<St, S> {
pub fn limit(mut self, value: impl Into<Option<i64>>) -> Self {
self._fields.0 = value.into();
self
}
pub fn maybe_limit(mut self, value: Option<i64>) -> Self {
self._fields.0 = value;
self
}
}
impl<St: search_state::State, S: BosStr> SearchBuilder<St, S> {
pub fn scope(mut self, value: impl Into<Option<S>>) -> Self {
self._fields.1 = value.into();
self
}
pub fn maybe_scope(mut self, value: Option<S>) -> Self {
self._fields.1 = value;
self
}
}
impl<St, S: BosStr> SearchBuilder<St, S>
where
St: search_state::State,
St::Search: search_state::IsUnset,
{
pub fn search(
mut self,
value: impl Into<S>,
) -> SearchBuilder<search_state::SetSearch<St>, S> {
self._fields.2 = Option::Some(value.into());
SearchBuilder {
_state: PhantomData,
_fields: self._fields,
_type: PhantomData,
}
}
}
impl<St, S: BosStr> SearchBuilder<St, S>
where
St: search_state::State,
St::Service: search_state::IsUnset,
{
pub fn service(
mut self,
value: impl Into<AtUri<S>>,
) -> SearchBuilder<search_state::SetService<St>, S> {
self._fields.3 = Option::Some(value.into());
SearchBuilder {
_state: PhantomData,
_fields: self._fields,
_type: PhantomData,
}
}
}
impl<St, S: BosStr> SearchBuilder<St, S>
where
St: search_state::State,
St::Search: search_state::IsSet,
St::Service: search_state::IsSet,
{
pub fn build(self) -> Search<S> {
Search {
limit: self._fields.0,
scope: self._fields.1,
search: self._fields.2.unwrap(),
service: self._fields.3.unwrap(),
}
}
}