Skip to content

Commit 396ae5f

Browse files
committed
updated samples
1 parent a5982f8 commit 396ae5f

20 files changed

Lines changed: 380 additions & 10 deletions

File tree

samples/client/petstore/rust/hyper/petstore/src/models/mod.rs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,40 @@ pub mod user;
4242
pub use self::user::User;
4343
pub mod vehicle;
4444
pub use self::vehicle::Vehicle;
45+
use serde::{Deserialize, Deserializer, Serializer};
46+
use serde_with::{de::DeserializeAsWrap, ser::SerializeAsWrap, DeserializeAs, SerializeAs};
47+
use std::marker::PhantomData;
48+
49+
pub(crate) struct DoubleOption<T>(PhantomData<T>);
50+
51+
impl<T, TAs> SerializeAs<Option<Option<T>>> for DoubleOption<TAs>
52+
where
53+
TAs: SerializeAs<T>,
54+
{
55+
fn serialize_as<S>(values: &Option<Option<T>>, serializer: S) -> Result<S::Ok, S::Error>
56+
where
57+
S: Serializer,
58+
{
59+
match values {
60+
None => serializer.serialize_unit(),
61+
Some(None) => serializer.serialize_none(),
62+
Some(Some(v)) => serializer.serialize_some(&SerializeAsWrap::<T, TAs>::new(v)),
63+
}
64+
}
65+
}
66+
67+
impl<'de, T, TAs> DeserializeAs<'de, Option<Option<T>>> for DoubleOption<TAs>
68+
where
69+
TAs: DeserializeAs<'de, T>,
70+
T: std::fmt::Debug,
71+
{
72+
fn deserialize_as<D>(deserializer: D) -> Result<Option<Option<T>>, D::Error>
73+
where
74+
D: Deserializer<'de>,
75+
{
76+
Ok(Some(
77+
DeserializeAsWrap::<Option<T>, Option<TAs>>::deserialize(deserializer)?
78+
.into_inner(),
79+
))
80+
}
81+
}

samples/client/petstore/rust/hyper/petstore/src/models/type_testing.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ pub struct TypeTesting {
3434
#[serde_as(as = "serde_with::base64::Base64")]
3535
#[serde(rename = "bytes")]
3636
pub bytes: Vec<u8>,
37-
#[serde_as(as = "Option<Option<serde_with::base64::Base64>>")]
37+
#[serde_as(as = "super::DoubleOption<serde_with::base64::Base64>")]
3838
#[serde(rename = "nullableBytes", default, skip_serializing_if = "Option::is_none")]
3939
pub nullable_bytes: Option<Option<Vec<u8>>>,
4040
#[serde(rename = "decimal")]

samples/client/petstore/rust/hyper0x/petstore/src/models/mod.rs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,40 @@ pub mod user;
4242
pub use self::user::User;
4343
pub mod vehicle;
4444
pub use self::vehicle::Vehicle;
45+
use serde::{Deserialize, Deserializer, Serializer};
46+
use serde_with::{de::DeserializeAsWrap, ser::SerializeAsWrap, DeserializeAs, SerializeAs};
47+
use std::marker::PhantomData;
48+
49+
pub(crate) struct DoubleOption<T>(PhantomData<T>);
50+
51+
impl<T, TAs> SerializeAs<Option<Option<T>>> for DoubleOption<TAs>
52+
where
53+
TAs: SerializeAs<T>,
54+
{
55+
fn serialize_as<S>(values: &Option<Option<T>>, serializer: S) -> Result<S::Ok, S::Error>
56+
where
57+
S: Serializer,
58+
{
59+
match values {
60+
None => serializer.serialize_unit(),
61+
Some(None) => serializer.serialize_none(),
62+
Some(Some(v)) => serializer.serialize_some(&SerializeAsWrap::<T, TAs>::new(v)),
63+
}
64+
}
65+
}
66+
67+
impl<'de, T, TAs> DeserializeAs<'de, Option<Option<T>>> for DoubleOption<TAs>
68+
where
69+
TAs: DeserializeAs<'de, T>,
70+
T: std::fmt::Debug,
71+
{
72+
fn deserialize_as<D>(deserializer: D) -> Result<Option<Option<T>>, D::Error>
73+
where
74+
D: Deserializer<'de>,
75+
{
76+
Ok(Some(
77+
DeserializeAsWrap::<Option<T>, Option<TAs>>::deserialize(deserializer)?
78+
.into_inner(),
79+
))
80+
}
81+
}

samples/client/petstore/rust/hyper0x/petstore/src/models/type_testing.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ pub struct TypeTesting {
3434
#[serde_as(as = "serde_with::base64::Base64")]
3535
#[serde(rename = "bytes")]
3636
pub bytes: Vec<u8>,
37-
#[serde_as(as = "Option<Option<serde_with::base64::Base64>>")]
37+
#[serde_as(as = "super::DoubleOption<serde_with::base64::Base64>")]
3838
#[serde(rename = "nullableBytes", default, skip_serializing_if = "Option::is_none")]
3939
pub nullable_bytes: Option<Option<Vec<u8>>>,
4040
#[serde(rename = "decimal")]

samples/client/petstore/rust/reqwest-trait/petstore/src/models/mod.rs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,40 @@ pub mod user;
4242
pub use self::user::User;
4343
pub mod vehicle;
4444
pub use self::vehicle::Vehicle;
45+
use serde::{Deserialize, Deserializer, Serializer};
46+
use serde_with::{de::DeserializeAsWrap, ser::SerializeAsWrap, DeserializeAs, SerializeAs};
47+
use std::marker::PhantomData;
48+
49+
pub(crate) struct DoubleOption<T>(PhantomData<T>);
50+
51+
impl<T, TAs> SerializeAs<Option<Option<T>>> for DoubleOption<TAs>
52+
where
53+
TAs: SerializeAs<T>,
54+
{
55+
fn serialize_as<S>(values: &Option<Option<T>>, serializer: S) -> Result<S::Ok, S::Error>
56+
where
57+
S: Serializer,
58+
{
59+
match values {
60+
None => serializer.serialize_unit(),
61+
Some(None) => serializer.serialize_none(),
62+
Some(Some(v)) => serializer.serialize_some(&SerializeAsWrap::<T, TAs>::new(v)),
63+
}
64+
}
65+
}
66+
67+
impl<'de, T, TAs> DeserializeAs<'de, Option<Option<T>>> for DoubleOption<TAs>
68+
where
69+
TAs: DeserializeAs<'de, T>,
70+
T: std::fmt::Debug,
71+
{
72+
fn deserialize_as<D>(deserializer: D) -> Result<Option<Option<T>>, D::Error>
73+
where
74+
D: Deserializer<'de>,
75+
{
76+
Ok(Some(
77+
DeserializeAsWrap::<Option<T>, Option<TAs>>::deserialize(deserializer)?
78+
.into_inner(),
79+
))
80+
}
81+
}

samples/client/petstore/rust/reqwest-trait/petstore/src/models/type_testing.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ pub struct TypeTesting {
3434
#[serde_as(as = "serde_with::base64::Base64")]
3535
#[serde(rename = "bytes")]
3636
pub bytes: Vec<u8>,
37-
#[serde_as(as = "Option<Option<serde_with::base64::Base64>>")]
37+
#[serde_as(as = "super::DoubleOption<serde_with::base64::Base64>")]
3838
#[serde(rename = "nullableBytes", default, skip_serializing_if = "Option::is_none")]
3939
pub nullable_bytes: Option<Option<Vec<u8>>>,
4040
#[serde(rename = "decimal")]

samples/client/petstore/rust/reqwest/petstore-async-middleware/src/models/mod.rs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,40 @@ pub mod user;
4242
pub use self::user::User;
4343
pub mod vehicle;
4444
pub use self::vehicle::Vehicle;
45+
use serde::{Deserialize, Deserializer, Serializer};
46+
use serde_with::{de::DeserializeAsWrap, ser::SerializeAsWrap, DeserializeAs, SerializeAs};
47+
use std::marker::PhantomData;
48+
49+
pub(crate) struct DoubleOption<T>(PhantomData<T>);
50+
51+
impl<T, TAs> SerializeAs<Option<Option<T>>> for DoubleOption<TAs>
52+
where
53+
TAs: SerializeAs<T>,
54+
{
55+
fn serialize_as<S>(values: &Option<Option<T>>, serializer: S) -> Result<S::Ok, S::Error>
56+
where
57+
S: Serializer,
58+
{
59+
match values {
60+
None => serializer.serialize_unit(),
61+
Some(None) => serializer.serialize_none(),
62+
Some(Some(v)) => serializer.serialize_some(&SerializeAsWrap::<T, TAs>::new(v)),
63+
}
64+
}
65+
}
66+
67+
impl<'de, T, TAs> DeserializeAs<'de, Option<Option<T>>> for DoubleOption<TAs>
68+
where
69+
TAs: DeserializeAs<'de, T>,
70+
T: std::fmt::Debug,
71+
{
72+
fn deserialize_as<D>(deserializer: D) -> Result<Option<Option<T>>, D::Error>
73+
where
74+
D: Deserializer<'de>,
75+
{
76+
Ok(Some(
77+
DeserializeAsWrap::<Option<T>, Option<TAs>>::deserialize(deserializer)?
78+
.into_inner(),
79+
))
80+
}
81+
}

samples/client/petstore/rust/reqwest/petstore-async-middleware/src/models/type_testing.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ pub struct TypeTesting {
3434
#[serde_as(as = "serde_with::base64::Base64")]
3535
#[serde(rename = "bytes")]
3636
pub bytes: Vec<u8>,
37-
#[serde_as(as = "Option<Option<serde_with::base64::Base64>>")]
37+
#[serde_as(as = "super::DoubleOption<serde_with::base64::Base64>")]
3838
#[serde(rename = "nullableBytes", default, skip_serializing_if = "Option::is_none")]
3939
pub nullable_bytes: Option<Option<Vec<u8>>>,
4040
#[serde(rename = "decimal")]

samples/client/petstore/rust/reqwest/petstore-async-tokensource/src/models/mod.rs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,40 @@ pub mod user;
4242
pub use self::user::User;
4343
pub mod vehicle;
4444
pub use self::vehicle::Vehicle;
45+
use serde::{Deserialize, Deserializer, Serializer};
46+
use serde_with::{de::DeserializeAsWrap, ser::SerializeAsWrap, DeserializeAs, SerializeAs};
47+
use std::marker::PhantomData;
48+
49+
pub(crate) struct DoubleOption<T>(PhantomData<T>);
50+
51+
impl<T, TAs> SerializeAs<Option<Option<T>>> for DoubleOption<TAs>
52+
where
53+
TAs: SerializeAs<T>,
54+
{
55+
fn serialize_as<S>(values: &Option<Option<T>>, serializer: S) -> Result<S::Ok, S::Error>
56+
where
57+
S: Serializer,
58+
{
59+
match values {
60+
None => serializer.serialize_unit(),
61+
Some(None) => serializer.serialize_none(),
62+
Some(Some(v)) => serializer.serialize_some(&SerializeAsWrap::<T, TAs>::new(v)),
63+
}
64+
}
65+
}
66+
67+
impl<'de, T, TAs> DeserializeAs<'de, Option<Option<T>>> for DoubleOption<TAs>
68+
where
69+
TAs: DeserializeAs<'de, T>,
70+
T: std::fmt::Debug,
71+
{
72+
fn deserialize_as<D>(deserializer: D) -> Result<Option<Option<T>>, D::Error>
73+
where
74+
D: Deserializer<'de>,
75+
{
76+
Ok(Some(
77+
DeserializeAsWrap::<Option<T>, Option<TAs>>::deserialize(deserializer)?
78+
.into_inner(),
79+
))
80+
}
81+
}

samples/client/petstore/rust/reqwest/petstore-async-tokensource/src/models/type_testing.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ pub struct TypeTesting {
3434
#[serde_as(as = "serde_with::base64::Base64")]
3535
#[serde(rename = "bytes")]
3636
pub bytes: Vec<u8>,
37-
#[serde_as(as = "Option<Option<serde_with::base64::Base64>>")]
37+
#[serde_as(as = "super::DoubleOption<serde_with::base64::Base64>")]
3838
#[serde(rename = "nullableBytes", default, skip_serializing_if = "Option::is_none")]
3939
pub nullable_bytes: Option<Option<Vec<u8>>>,
4040
#[serde(rename = "decimal")]

0 commit comments

Comments
 (0)