#[allow(unused_imports)]
use alloc::collections::BTreeMap;
#[allow(unused_imports)]
use core::marker::PhantomData;
use jacquard_common::CowStr;
#[allow(unused_imports)]
use jacquard_common::deps::codegen::unicode_segmentation::UnicodeSegmentation;
use jacquard_common::types::collection::{Collection, RecordError};
use jacquard_common::types::string::{Did, AtUri, Cid, Datetime};
use jacquard_common::types::uri::{RecordUri, UriError};
use jacquard_common::types::value::Data;
use jacquard_common::xrpc::XrpcResp;
use jacquard_derive::{IntoStatic, lexicon};
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::place_stream::metadata::content_rights::ContentRights;
use crate::place_stream::metadata::content_warnings::ContentWarnings;
use crate::place_stream::metadata::distribution_policy::DistributionPolicy;
use crate::place_stream::segment;
#[lexicon]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
#[serde(rename_all = "camelCase")]
pub struct Audio<'a> {
pub channels: i64,
#[serde(borrow)]
pub codec: CowStr<'a>,
pub rate: i64,
}
#[lexicon]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
#[serde(rename_all = "camelCase")]
pub struct Framerate<'a> {
pub den: i64,
pub num: i64,
}
#[lexicon]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
#[serde(rename_all = "camelCase")]
pub struct Segment<'a> {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(borrow)]
pub audio: Option<Vec<segment::Audio<'a>>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(borrow)]
pub content_rights: Option<ContentRights<'a>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(borrow)]
pub content_warnings: Option<ContentWarnings<'a>>,
#[serde(borrow)]
pub creator: Did<'a>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(borrow)]
pub distribution_policy: Option<DistributionPolicy<'a>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub duration: Option<i64>,
#[serde(borrow)]
pub id: CowStr<'a>,
#[serde(borrow)]
pub signing_key: CowStr<'a>,
#[serde(skip_serializing_if = "Option::is_none")]
pub size: Option<i64>,
pub start_time: Datetime,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(borrow)]
pub video: Option<Vec<segment::Video<'a>>>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
#[serde(rename_all = "camelCase")]
pub struct SegmentGetRecordOutput<'a> {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(borrow)]
pub cid: Option<Cid<'a>>,
#[serde(borrow)]
pub uri: AtUri<'a>,
#[serde(borrow)]
pub value: Segment<'a>,
}
#[lexicon]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
#[serde(rename_all = "camelCase")]
pub struct SegmentView<'a> {
#[serde(borrow)]
pub cid: Cid<'a>,
#[serde(borrow)]
pub record: Data<'a>,
}
#[lexicon]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
#[serde(rename_all = "camelCase")]
pub struct Video<'a> {
#[serde(skip_serializing_if = "Option::is_none")]
pub bframes: Option<bool>,
#[serde(borrow)]
pub codec: CowStr<'a>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(borrow)]
pub framerate: Option<segment::Framerate<'a>>,
pub height: i64,
pub width: i64,
}
impl<'a> Segment<'a> {
pub fn uri(
uri: impl Into<CowStr<'a>>,
) -> Result<RecordUri<'a, SegmentRecord>, UriError> {
RecordUri::try_from_uri(AtUri::new_cow(uri.into())?)
}
}
impl<'a> LexiconSchema for Audio<'a> {
fn nsid() -> &'static str {
"place.stream.segment"
}
fn def_name() -> &'static str {
"audio"
}
fn lexicon_doc() -> LexiconDoc<'static> {
lexicon_doc_place_stream_segment()
}
fn validate(&self) -> Result<(), ConstraintError> {
Ok(())
}
}
impl<'a> LexiconSchema for Framerate<'a> {
fn nsid() -> &'static str {
"place.stream.segment"
}
fn def_name() -> &'static str {
"framerate"
}
fn lexicon_doc() -> LexiconDoc<'static> {
lexicon_doc_place_stream_segment()
}
fn validate(&self) -> Result<(), ConstraintError> {
Ok(())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct SegmentRecord;
impl XrpcResp for SegmentRecord {
const NSID: &'static str = "place.stream.segment";
const ENCODING: &'static str = "application/json";
type Output<'de> = SegmentGetRecordOutput<'de>;
type Err<'de> = RecordError<'de>;
}
impl From<SegmentGetRecordOutput<'_>> for Segment<'_> {
fn from(output: SegmentGetRecordOutput<'_>) -> Self {
use jacquard_common::IntoStatic;
output.value.into_static()
}
}
impl Collection for Segment<'_> {
const NSID: &'static str = "place.stream.segment";
type Record = SegmentRecord;
}
impl Collection for SegmentRecord {
const NSID: &'static str = "place.stream.segment";
type Record = SegmentRecord;
}
impl<'a> LexiconSchema for Segment<'a> {
fn nsid() -> &'static str {
"place.stream.segment"
}
fn def_name() -> &'static str {
"main"
}
fn lexicon_doc() -> LexiconDoc<'static> {
lexicon_doc_place_stream_segment()
}
fn validate(&self) -> Result<(), ConstraintError> {
Ok(())
}
}
impl<'a> LexiconSchema for SegmentView<'a> {
fn nsid() -> &'static str {
"place.stream.segment"
}
fn def_name() -> &'static str {
"segmentView"
}
fn lexicon_doc() -> LexiconDoc<'static> {
lexicon_doc_place_stream_segment()
}
fn validate(&self) -> Result<(), ConstraintError> {
Ok(())
}
}
impl<'a> LexiconSchema for Video<'a> {
fn nsid() -> &'static str {
"place.stream.segment"
}
fn def_name() -> &'static str {
"video"
}
fn lexicon_doc() -> LexiconDoc<'static> {
lexicon_doc_place_stream_segment()
}
fn validate(&self) -> Result<(), ConstraintError> {
Ok(())
}
}
pub mod audio_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 Rate;
type Channels;
type Codec;
}
pub struct Empty(());
impl sealed::Sealed for Empty {}
impl State for Empty {
type Rate = Unset;
type Channels = Unset;
type Codec = Unset;
}
pub struct SetRate<S: State = Empty>(PhantomData<fn() -> S>);
impl<S: State> sealed::Sealed for SetRate<S> {}
impl<S: State> State for SetRate<S> {
type Rate = Set<members::rate>;
type Channels = S::Channels;
type Codec = S::Codec;
}
pub struct SetChannels<S: State = Empty>(PhantomData<fn() -> S>);
impl<S: State> sealed::Sealed for SetChannels<S> {}
impl<S: State> State for SetChannels<S> {
type Rate = S::Rate;
type Channels = Set<members::channels>;
type Codec = S::Codec;
}
pub struct SetCodec<S: State = Empty>(PhantomData<fn() -> S>);
impl<S: State> sealed::Sealed for SetCodec<S> {}
impl<S: State> State for SetCodec<S> {
type Rate = S::Rate;
type Channels = S::Channels;
type Codec = Set<members::codec>;
}
#[allow(non_camel_case_types)]
pub mod members {
pub struct rate(());
pub struct channels(());
pub struct codec(());
}
}
pub struct AudioBuilder<'a, S: audio_state::State> {
_state: PhantomData<fn() -> S>,
_fields: (Option<i64>, Option<CowStr<'a>>, Option<i64>),
_lifetime: PhantomData<&'a ()>,
}
impl<'a> Audio<'a> {
pub fn new() -> AudioBuilder<'a, audio_state::Empty> {
AudioBuilder::new()
}
}
impl<'a> AudioBuilder<'a, audio_state::Empty> {
pub fn new() -> Self {
AudioBuilder {
_state: PhantomData,
_fields: (None, None, None),
_lifetime: PhantomData,
}
}
}
impl<'a, S> AudioBuilder<'a, S>
where
S: audio_state::State,
S::Channels: audio_state::IsUnset,
{
pub fn channels(
mut self,
value: impl Into<i64>,
) -> AudioBuilder<'a, audio_state::SetChannels<S>> {
self._fields.0 = Option::Some(value.into());
AudioBuilder {
_state: PhantomData,
_fields: self._fields,
_lifetime: PhantomData,
}
}
}
impl<'a, S> AudioBuilder<'a, S>
where
S: audio_state::State,
S::Codec: audio_state::IsUnset,
{
pub fn codec(
mut self,
value: impl Into<CowStr<'a>>,
) -> AudioBuilder<'a, audio_state::SetCodec<S>> {
self._fields.1 = Option::Some(value.into());
AudioBuilder {
_state: PhantomData,
_fields: self._fields,
_lifetime: PhantomData,
}
}
}
impl<'a, S> AudioBuilder<'a, S>
where
S: audio_state::State,
S::Rate: audio_state::IsUnset,
{
pub fn rate(
mut self,
value: impl Into<i64>,
) -> AudioBuilder<'a, audio_state::SetRate<S>> {
self._fields.2 = Option::Some(value.into());
AudioBuilder {
_state: PhantomData,
_fields: self._fields,
_lifetime: PhantomData,
}
}
}
impl<'a, S> AudioBuilder<'a, S>
where
S: audio_state::State,
S::Rate: audio_state::IsSet,
S::Channels: audio_state::IsSet,
S::Codec: audio_state::IsSet,
{
pub fn build(self) -> Audio<'a> {
Audio {
channels: self._fields.0.unwrap(),
codec: self._fields.1.unwrap(),
rate: self._fields.2.unwrap(),
extra_data: Default::default(),
}
}
pub fn build_with_data(
self,
extra_data: BTreeMap<jacquard_common::deps::smol_str::SmolStr, Data<'a>>,
) -> Audio<'a> {
Audio {
channels: self._fields.0.unwrap(),
codec: self._fields.1.unwrap(),
rate: self._fields.2.unwrap(),
extra_data: Some(extra_data),
}
}
}
fn lexicon_doc_place_stream_segment() -> 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("place.stream.segment"),
defs: {
let mut map = BTreeMap::new();
map.insert(
SmolStr::new_static("audio"),
LexUserType::Object(LexObject {
required: Some(
vec![
SmolStr::new_static("codec"), SmolStr::new_static("rate"),
SmolStr::new_static("channels")
],
),
properties: {
#[allow(unused_mut)]
let mut map = BTreeMap::new();
map.insert(
SmolStr::new_static("channels"),
LexObjectProperty::Integer(LexInteger {
..Default::default()
}),
);
map.insert(
SmolStr::new_static("codec"),
LexObjectProperty::String(LexString { ..Default::default() }),
);
map.insert(
SmolStr::new_static("rate"),
LexObjectProperty::Integer(LexInteger {
..Default::default()
}),
);
map
},
..Default::default()
}),
);
map.insert(
SmolStr::new_static("framerate"),
LexUserType::Object(LexObject {
required: Some(
vec![SmolStr::new_static("num"), SmolStr::new_static("den")],
),
properties: {
#[allow(unused_mut)]
let mut map = BTreeMap::new();
map.insert(
SmolStr::new_static("den"),
LexObjectProperty::Integer(LexInteger {
..Default::default()
}),
);
map.insert(
SmolStr::new_static("num"),
LexObjectProperty::Integer(LexInteger {
..Default::default()
}),
);
map
},
..Default::default()
}),
);
map.insert(
SmolStr::new_static("main"),
LexUserType::Record(LexRecord {
description: Some(
CowStr::new_static(
"Media file representing a segment of a livestream",
),
),
key: Some(CowStr::new_static("tid")),
record: LexRecordRecord::Object(LexObject {
required: Some(
vec![
SmolStr::new_static("id"),
SmolStr::new_static("signingKey"),
SmolStr::new_static("startTime"),
SmolStr::new_static("creator")
],
),
properties: {
#[allow(unused_mut)]
let mut map = BTreeMap::new();
map.insert(
SmolStr::new_static("audio"),
LexObjectProperty::Array(LexArray {
items: LexArrayItem::Ref(LexRef {
r#ref: CowStr::new_static("#audio"),
..Default::default()
}),
..Default::default()
}),
);
map.insert(
SmolStr::new_static("contentRights"),
LexObjectProperty::Ref(LexRef {
r#ref: CowStr::new_static(
"place.stream.metadata.contentRights",
),
..Default::default()
}),
);
map.insert(
SmolStr::new_static("contentWarnings"),
LexObjectProperty::Ref(LexRef {
r#ref: CowStr::new_static(
"place.stream.metadata.contentWarnings",
),
..Default::default()
}),
);
map.insert(
SmolStr::new_static("creator"),
LexObjectProperty::String(LexString {
format: Some(LexStringFormat::Did),
..Default::default()
}),
);
map.insert(
SmolStr::new_static("distributionPolicy"),
LexObjectProperty::Ref(LexRef {
r#ref: CowStr::new_static(
"place.stream.metadata.distributionPolicy",
),
..Default::default()
}),
);
map.insert(
SmolStr::new_static("duration"),
LexObjectProperty::Integer(LexInteger {
..Default::default()
}),
);
map.insert(
SmolStr::new_static("id"),
LexObjectProperty::String(LexString {
description: Some(
CowStr::new_static("Unique identifier for the segment"),
),
..Default::default()
}),
);
map.insert(
SmolStr::new_static("signingKey"),
LexObjectProperty::String(LexString {
description: Some(
CowStr::new_static(
"The DID of the signing key used for this segment",
),
),
..Default::default()
}),
);
map.insert(
SmolStr::new_static("size"),
LexObjectProperty::Integer(LexInteger {
..Default::default()
}),
);
map.insert(
SmolStr::new_static("startTime"),
LexObjectProperty::String(LexString {
description: Some(
CowStr::new_static("When this segment started"),
),
format: Some(LexStringFormat::Datetime),
..Default::default()
}),
);
map.insert(
SmolStr::new_static("video"),
LexObjectProperty::Array(LexArray {
items: LexArrayItem::Ref(LexRef {
r#ref: CowStr::new_static("#video"),
..Default::default()
}),
..Default::default()
}),
);
map
},
..Default::default()
}),
..Default::default()
}),
);
map.insert(
SmolStr::new_static("segmentView"),
LexUserType::Object(LexObject {
required: Some(
vec![SmolStr::new_static("cid"), SmolStr::new_static("record")],
),
properties: {
#[allow(unused_mut)]
let mut map = BTreeMap::new();
map.insert(
SmolStr::new_static("cid"),
LexObjectProperty::String(LexString {
format: Some(LexStringFormat::Cid),
..Default::default()
}),
);
map.insert(
SmolStr::new_static("record"),
LexObjectProperty::Unknown(LexUnknown {
..Default::default()
}),
);
map
},
..Default::default()
}),
);
map.insert(
SmolStr::new_static("video"),
LexUserType::Object(LexObject {
required: Some(
vec![
SmolStr::new_static("codec"), SmolStr::new_static("width"),
SmolStr::new_static("height")
],
),
properties: {
#[allow(unused_mut)]
let mut map = BTreeMap::new();
map.insert(
SmolStr::new_static("bframes"),
LexObjectProperty::Boolean(LexBoolean {
..Default::default()
}),
);
map.insert(
SmolStr::new_static("codec"),
LexObjectProperty::String(LexString { ..Default::default() }),
);
map.insert(
SmolStr::new_static("framerate"),
LexObjectProperty::Ref(LexRef {
r#ref: CowStr::new_static("#framerate"),
..Default::default()
}),
);
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
},
..Default::default()
}
}
pub mod framerate_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 Num;
type Den;
}
pub struct Empty(());
impl sealed::Sealed for Empty {}
impl State for Empty {
type Num = Unset;
type Den = Unset;
}
pub struct SetNum<S: State = Empty>(PhantomData<fn() -> S>);
impl<S: State> sealed::Sealed for SetNum<S> {}
impl<S: State> State for SetNum<S> {
type Num = Set<members::num>;
type Den = S::Den;
}
pub struct SetDen<S: State = Empty>(PhantomData<fn() -> S>);
impl<S: State> sealed::Sealed for SetDen<S> {}
impl<S: State> State for SetDen<S> {
type Num = S::Num;
type Den = Set<members::den>;
}
#[allow(non_camel_case_types)]
pub mod members {
pub struct num(());
pub struct den(());
}
}
pub struct FramerateBuilder<'a, S: framerate_state::State> {
_state: PhantomData<fn() -> S>,
_fields: (Option<i64>, Option<i64>),
_lifetime: PhantomData<&'a ()>,
}
impl<'a> Framerate<'a> {
pub fn new() -> FramerateBuilder<'a, framerate_state::Empty> {
FramerateBuilder::new()
}
}
impl<'a> FramerateBuilder<'a, framerate_state::Empty> {
pub fn new() -> Self {
FramerateBuilder {
_state: PhantomData,
_fields: (None, None),
_lifetime: PhantomData,
}
}
}
impl<'a, S> FramerateBuilder<'a, S>
where
S: framerate_state::State,
S::Den: framerate_state::IsUnset,
{
pub fn den(
mut self,
value: impl Into<i64>,
) -> FramerateBuilder<'a, framerate_state::SetDen<S>> {
self._fields.0 = Option::Some(value.into());
FramerateBuilder {
_state: PhantomData,
_fields: self._fields,
_lifetime: PhantomData,
}
}
}
impl<'a, S> FramerateBuilder<'a, S>
where
S: framerate_state::State,
S::Num: framerate_state::IsUnset,
{
pub fn num(
mut self,
value: impl Into<i64>,
) -> FramerateBuilder<'a, framerate_state::SetNum<S>> {
self._fields.1 = Option::Some(value.into());
FramerateBuilder {
_state: PhantomData,
_fields: self._fields,
_lifetime: PhantomData,
}
}
}
impl<'a, S> FramerateBuilder<'a, S>
where
S: framerate_state::State,
S::Num: framerate_state::IsSet,
S::Den: framerate_state::IsSet,
{
pub fn build(self) -> Framerate<'a> {
Framerate {
den: self._fields.0.unwrap(),
num: self._fields.1.unwrap(),
extra_data: Default::default(),
}
}
pub fn build_with_data(
self,
extra_data: BTreeMap<jacquard_common::deps::smol_str::SmolStr, Data<'a>>,
) -> Framerate<'a> {
Framerate {
den: self._fields.0.unwrap(),
num: self._fields.1.unwrap(),
extra_data: Some(extra_data),
}
}
}
pub mod segment_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 SigningKey;
type StartTime;
type Id;
type Creator;
}
pub struct Empty(());
impl sealed::Sealed for Empty {}
impl State for Empty {
type SigningKey = Unset;
type StartTime = Unset;
type Id = Unset;
type Creator = Unset;
}
pub struct SetSigningKey<S: State = Empty>(PhantomData<fn() -> S>);
impl<S: State> sealed::Sealed for SetSigningKey<S> {}
impl<S: State> State for SetSigningKey<S> {
type SigningKey = Set<members::signing_key>;
type StartTime = S::StartTime;
type Id = S::Id;
type Creator = S::Creator;
}
pub struct SetStartTime<S: State = Empty>(PhantomData<fn() -> S>);
impl<S: State> sealed::Sealed for SetStartTime<S> {}
impl<S: State> State for SetStartTime<S> {
type SigningKey = S::SigningKey;
type StartTime = Set<members::start_time>;
type Id = S::Id;
type Creator = S::Creator;
}
pub struct SetId<S: State = Empty>(PhantomData<fn() -> S>);
impl<S: State> sealed::Sealed for SetId<S> {}
impl<S: State> State for SetId<S> {
type SigningKey = S::SigningKey;
type StartTime = S::StartTime;
type Id = Set<members::id>;
type Creator = S::Creator;
}
pub struct SetCreator<S: State = Empty>(PhantomData<fn() -> S>);
impl<S: State> sealed::Sealed for SetCreator<S> {}
impl<S: State> State for SetCreator<S> {
type SigningKey = S::SigningKey;
type StartTime = S::StartTime;
type Id = S::Id;
type Creator = Set<members::creator>;
}
#[allow(non_camel_case_types)]
pub mod members {
pub struct signing_key(());
pub struct start_time(());
pub struct id(());
pub struct creator(());
}
}
pub struct SegmentBuilder<'a, S: segment_state::State> {
_state: PhantomData<fn() -> S>,
_fields: (
Option<Vec<segment::Audio<'a>>>,
Option<ContentRights<'a>>,
Option<ContentWarnings<'a>>,
Option<Did<'a>>,
Option<DistributionPolicy<'a>>,
Option<i64>,
Option<CowStr<'a>>,
Option<CowStr<'a>>,
Option<i64>,
Option<Datetime>,
Option<Vec<segment::Video<'a>>>,
),
_lifetime: PhantomData<&'a ()>,
}
impl<'a> Segment<'a> {
pub fn new() -> SegmentBuilder<'a, segment_state::Empty> {
SegmentBuilder::new()
}
}
impl<'a> SegmentBuilder<'a, segment_state::Empty> {
pub fn new() -> Self {
SegmentBuilder {
_state: PhantomData,
_fields: (None, None, None, None, None, None, None, None, None, None, None),
_lifetime: PhantomData,
}
}
}
impl<'a, S: segment_state::State> SegmentBuilder<'a, S> {
pub fn audio(mut self, value: impl Into<Option<Vec<segment::Audio<'a>>>>) -> Self {
self._fields.0 = value.into();
self
}
pub fn maybe_audio(mut self, value: Option<Vec<segment::Audio<'a>>>) -> Self {
self._fields.0 = value;
self
}
}
impl<'a, S: segment_state::State> SegmentBuilder<'a, S> {
pub fn content_rights(
mut self,
value: impl Into<Option<ContentRights<'a>>>,
) -> Self {
self._fields.1 = value.into();
self
}
pub fn maybe_content_rights(mut self, value: Option<ContentRights<'a>>) -> Self {
self._fields.1 = value;
self
}
}
impl<'a, S: segment_state::State> SegmentBuilder<'a, S> {
pub fn content_warnings(
mut self,
value: impl Into<Option<ContentWarnings<'a>>>,
) -> Self {
self._fields.2 = value.into();
self
}
pub fn maybe_content_warnings(mut self, value: Option<ContentWarnings<'a>>) -> Self {
self._fields.2 = value;
self
}
}
impl<'a, S> SegmentBuilder<'a, S>
where
S: segment_state::State,
S::Creator: segment_state::IsUnset,
{
pub fn creator(
mut self,
value: impl Into<Did<'a>>,
) -> SegmentBuilder<'a, segment_state::SetCreator<S>> {
self._fields.3 = Option::Some(value.into());
SegmentBuilder {
_state: PhantomData,
_fields: self._fields,
_lifetime: PhantomData,
}
}
}
impl<'a, S: segment_state::State> SegmentBuilder<'a, S> {
pub fn distribution_policy(
mut self,
value: impl Into<Option<DistributionPolicy<'a>>>,
) -> Self {
self._fields.4 = value.into();
self
}
pub fn maybe_distribution_policy(
mut self,
value: Option<DistributionPolicy<'a>>,
) -> Self {
self._fields.4 = value;
self
}
}
impl<'a, S: segment_state::State> SegmentBuilder<'a, S> {
pub fn duration(mut self, value: impl Into<Option<i64>>) -> Self {
self._fields.5 = value.into();
self
}
pub fn maybe_duration(mut self, value: Option<i64>) -> Self {
self._fields.5 = value;
self
}
}
impl<'a, S> SegmentBuilder<'a, S>
where
S: segment_state::State,
S::Id: segment_state::IsUnset,
{
pub fn id(
mut self,
value: impl Into<CowStr<'a>>,
) -> SegmentBuilder<'a, segment_state::SetId<S>> {
self._fields.6 = Option::Some(value.into());
SegmentBuilder {
_state: PhantomData,
_fields: self._fields,
_lifetime: PhantomData,
}
}
}
impl<'a, S> SegmentBuilder<'a, S>
where
S: segment_state::State,
S::SigningKey: segment_state::IsUnset,
{
pub fn signing_key(
mut self,
value: impl Into<CowStr<'a>>,
) -> SegmentBuilder<'a, segment_state::SetSigningKey<S>> {
self._fields.7 = Option::Some(value.into());
SegmentBuilder {
_state: PhantomData,
_fields: self._fields,
_lifetime: PhantomData,
}
}
}
impl<'a, S: segment_state::State> SegmentBuilder<'a, S> {
pub fn size(mut self, value: impl Into<Option<i64>>) -> Self {
self._fields.8 = value.into();
self
}
pub fn maybe_size(mut self, value: Option<i64>) -> Self {
self._fields.8 = value;
self
}
}
impl<'a, S> SegmentBuilder<'a, S>
where
S: segment_state::State,
S::StartTime: segment_state::IsUnset,
{
pub fn start_time(
mut self,
value: impl Into<Datetime>,
) -> SegmentBuilder<'a, segment_state::SetStartTime<S>> {
self._fields.9 = Option::Some(value.into());
SegmentBuilder {
_state: PhantomData,
_fields: self._fields,
_lifetime: PhantomData,
}
}
}
impl<'a, S: segment_state::State> SegmentBuilder<'a, S> {
pub fn video(mut self, value: impl Into<Option<Vec<segment::Video<'a>>>>) -> Self {
self._fields.10 = value.into();
self
}
pub fn maybe_video(mut self, value: Option<Vec<segment::Video<'a>>>) -> Self {
self._fields.10 = value;
self
}
}
impl<'a, S> SegmentBuilder<'a, S>
where
S: segment_state::State,
S::SigningKey: segment_state::IsSet,
S::StartTime: segment_state::IsSet,
S::Id: segment_state::IsSet,
S::Creator: segment_state::IsSet,
{
pub fn build(self) -> Segment<'a> {
Segment {
audio: self._fields.0,
content_rights: self._fields.1,
content_warnings: self._fields.2,
creator: self._fields.3.unwrap(),
distribution_policy: self._fields.4,
duration: self._fields.5,
id: self._fields.6.unwrap(),
signing_key: self._fields.7.unwrap(),
size: self._fields.8,
start_time: self._fields.9.unwrap(),
video: self._fields.10,
extra_data: Default::default(),
}
}
pub fn build_with_data(
self,
extra_data: BTreeMap<jacquard_common::deps::smol_str::SmolStr, Data<'a>>,
) -> Segment<'a> {
Segment {
audio: self._fields.0,
content_rights: self._fields.1,
content_warnings: self._fields.2,
creator: self._fields.3.unwrap(),
distribution_policy: self._fields.4,
duration: self._fields.5,
id: self._fields.6.unwrap(),
signing_key: self._fields.7.unwrap(),
size: self._fields.8,
start_time: self._fields.9.unwrap(),
video: self._fields.10,
extra_data: Some(extra_data),
}
}
}
pub mod segment_view_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 Record;
type Cid;
}
pub struct Empty(());
impl sealed::Sealed for Empty {}
impl State for Empty {
type Record = Unset;
type Cid = Unset;
}
pub struct SetRecord<S: State = Empty>(PhantomData<fn() -> S>);
impl<S: State> sealed::Sealed for SetRecord<S> {}
impl<S: State> State for SetRecord<S> {
type Record = Set<members::record>;
type Cid = S::Cid;
}
pub struct SetCid<S: State = Empty>(PhantomData<fn() -> S>);
impl<S: State> sealed::Sealed for SetCid<S> {}
impl<S: State> State for SetCid<S> {
type Record = S::Record;
type Cid = Set<members::cid>;
}
#[allow(non_camel_case_types)]
pub mod members {
pub struct record(());
pub struct cid(());
}
}
pub struct SegmentViewBuilder<'a, S: segment_view_state::State> {
_state: PhantomData<fn() -> S>,
_fields: (Option<Cid<'a>>, Option<Data<'a>>),
_lifetime: PhantomData<&'a ()>,
}
impl<'a> SegmentView<'a> {
pub fn new() -> SegmentViewBuilder<'a, segment_view_state::Empty> {
SegmentViewBuilder::new()
}
}
impl<'a> SegmentViewBuilder<'a, segment_view_state::Empty> {
pub fn new() -> Self {
SegmentViewBuilder {
_state: PhantomData,
_fields: (None, None),
_lifetime: PhantomData,
}
}
}
impl<'a, S> SegmentViewBuilder<'a, S>
where
S: segment_view_state::State,
S::Cid: segment_view_state::IsUnset,
{
pub fn cid(
mut self,
value: impl Into<Cid<'a>>,
) -> SegmentViewBuilder<'a, segment_view_state::SetCid<S>> {
self._fields.0 = Option::Some(value.into());
SegmentViewBuilder {
_state: PhantomData,
_fields: self._fields,
_lifetime: PhantomData,
}
}
}
impl<'a, S> SegmentViewBuilder<'a, S>
where
S: segment_view_state::State,
S::Record: segment_view_state::IsUnset,
{
pub fn record(
mut self,
value: impl Into<Data<'a>>,
) -> SegmentViewBuilder<'a, segment_view_state::SetRecord<S>> {
self._fields.1 = Option::Some(value.into());
SegmentViewBuilder {
_state: PhantomData,
_fields: self._fields,
_lifetime: PhantomData,
}
}
}
impl<'a, S> SegmentViewBuilder<'a, S>
where
S: segment_view_state::State,
S::Record: segment_view_state::IsSet,
S::Cid: segment_view_state::IsSet,
{
pub fn build(self) -> SegmentView<'a> {
SegmentView {
cid: self._fields.0.unwrap(),
record: self._fields.1.unwrap(),
extra_data: Default::default(),
}
}
pub fn build_with_data(
self,
extra_data: BTreeMap<jacquard_common::deps::smol_str::SmolStr, Data<'a>>,
) -> SegmentView<'a> {
SegmentView {
cid: self._fields.0.unwrap(),
record: self._fields.1.unwrap(),
extra_data: Some(extra_data),
}
}
}
pub mod video_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 Width;
type Codec;
type Height;
}
pub struct Empty(());
impl sealed::Sealed for Empty {}
impl State for Empty {
type Width = Unset;
type Codec = Unset;
type Height = Unset;
}
pub struct SetWidth<S: State = Empty>(PhantomData<fn() -> S>);
impl<S: State> sealed::Sealed for SetWidth<S> {}
impl<S: State> State for SetWidth<S> {
type Width = Set<members::width>;
type Codec = S::Codec;
type Height = S::Height;
}
pub struct SetCodec<S: State = Empty>(PhantomData<fn() -> S>);
impl<S: State> sealed::Sealed for SetCodec<S> {}
impl<S: State> State for SetCodec<S> {
type Width = S::Width;
type Codec = Set<members::codec>;
type Height = S::Height;
}
pub struct SetHeight<S: State = Empty>(PhantomData<fn() -> S>);
impl<S: State> sealed::Sealed for SetHeight<S> {}
impl<S: State> State for SetHeight<S> {
type Width = S::Width;
type Codec = S::Codec;
type Height = Set<members::height>;
}
#[allow(non_camel_case_types)]
pub mod members {
pub struct width(());
pub struct codec(());
pub struct height(());
}
}
pub struct VideoBuilder<'a, S: video_state::State> {
_state: PhantomData<fn() -> S>,
_fields: (
Option<bool>,
Option<CowStr<'a>>,
Option<segment::Framerate<'a>>,
Option<i64>,
Option<i64>,
),
_lifetime: PhantomData<&'a ()>,
}
impl<'a> Video<'a> {
pub fn new() -> VideoBuilder<'a, video_state::Empty> {
VideoBuilder::new()
}
}
impl<'a> VideoBuilder<'a, video_state::Empty> {
pub fn new() -> Self {
VideoBuilder {
_state: PhantomData,
_fields: (None, None, None, None, None),
_lifetime: PhantomData,
}
}
}
impl<'a, S: video_state::State> VideoBuilder<'a, S> {
pub fn bframes(mut self, value: impl Into<Option<bool>>) -> Self {
self._fields.0 = value.into();
self
}
pub fn maybe_bframes(mut self, value: Option<bool>) -> Self {
self._fields.0 = value;
self
}
}
impl<'a, S> VideoBuilder<'a, S>
where
S: video_state::State,
S::Codec: video_state::IsUnset,
{
pub fn codec(
mut self,
value: impl Into<CowStr<'a>>,
) -> VideoBuilder<'a, video_state::SetCodec<S>> {
self._fields.1 = Option::Some(value.into());
VideoBuilder {
_state: PhantomData,
_fields: self._fields,
_lifetime: PhantomData,
}
}
}
impl<'a, S: video_state::State> VideoBuilder<'a, S> {
pub fn framerate(
mut self,
value: impl Into<Option<segment::Framerate<'a>>>,
) -> Self {
self._fields.2 = value.into();
self
}
pub fn maybe_framerate(mut self, value: Option<segment::Framerate<'a>>) -> Self {
self._fields.2 = value;
self
}
}
impl<'a, S> VideoBuilder<'a, S>
where
S: video_state::State,
S::Height: video_state::IsUnset,
{
pub fn height(
mut self,
value: impl Into<i64>,
) -> VideoBuilder<'a, video_state::SetHeight<S>> {
self._fields.3 = Option::Some(value.into());
VideoBuilder {
_state: PhantomData,
_fields: self._fields,
_lifetime: PhantomData,
}
}
}
impl<'a, S> VideoBuilder<'a, S>
where
S: video_state::State,
S::Width: video_state::IsUnset,
{
pub fn width(
mut self,
value: impl Into<i64>,
) -> VideoBuilder<'a, video_state::SetWidth<S>> {
self._fields.4 = Option::Some(value.into());
VideoBuilder {
_state: PhantomData,
_fields: self._fields,
_lifetime: PhantomData,
}
}
}
impl<'a, S> VideoBuilder<'a, S>
where
S: video_state::State,
S::Width: video_state::IsSet,
S::Codec: video_state::IsSet,
S::Height: video_state::IsSet,
{
pub fn build(self) -> Video<'a> {
Video {
bframes: self._fields.0,
codec: self._fields.1.unwrap(),
framerate: self._fields.2,
height: self._fields.3.unwrap(),
width: self._fields.4.unwrap(),
extra_data: Default::default(),
}
}
pub fn build_with_data(
self,
extra_data: BTreeMap<jacquard_common::deps::smol_str::SmolStr, Data<'a>>,
) -> Video<'a> {
Video {
bframes: self._fields.0,
codec: self._fields.1.unwrap(),
framerate: self._fields.2,
height: self._fields.3.unwrap(),
width: self._fields.4.unwrap(),
extra_data: Some(extra_data),
}
}
}