Skip to content

Commit

Permalink
Mark newtype wrappers as #[serde(transparent)] (#724)
Browse files Browse the repository at this point in the history
  • Loading branch information
ahl authored Dec 24, 2024
1 parent 2597a22 commit fa65d74
Show file tree
Hide file tree
Showing 22 changed files with 81 additions and 8 deletions.
1 change: 1 addition & 0 deletions cargo-typify/tests/outputs/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ pub mod error {
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct Fruit(pub ::std::collections::HashMap<::std::string::String, ::std::string::String>);
impl ::std::ops::Deref for Fruit {
type Target = ::std::collections::HashMap<::std::string::String, ::std::string::String>;
Expand Down
1 change: 1 addition & 0 deletions cargo-typify/tests/outputs/custom_btree_map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ pub mod error {
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct Fruit(pub ::std::collections::BTreeMap<::std::string::String, ::std::string::String>);
impl ::std::ops::Deref for Fruit {
type Target = ::std::collections::BTreeMap<::std::string::String, ::std::string::String>;
Expand Down
1 change: 1 addition & 0 deletions cargo-typify/tests/outputs/derive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ pub mod error {
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug, ExtraDerive)]
#[serde(transparent)]
pub struct Fruit(pub ::std::collections::HashMap<::std::string::String, ::std::string::String>);
impl ::std::ops::Deref for Fruit {
type Target = ::std::collections::HashMap<::std::string::String, ::std::string::String>;
Expand Down
1 change: 1 addition & 0 deletions cargo-typify/tests/outputs/multi_derive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ pub mod error {
#[derive(
:: serde :: Deserialize, :: serde :: Serialize, AnotherDerive, Clone, Debug, ExtraDerive,
)]
#[serde(transparent)]
pub struct Fruit(pub ::std::collections::HashMap<::std::string::String, ::std::string::String>);
impl ::std::ops::Deref for Fruit {
type Target = ::std::collections::HashMap<::std::string::String, ::std::string::String>;
Expand Down
1 change: 1 addition & 0 deletions cargo-typify/tests/outputs/no-builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ pub mod error {
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct Fruit(pub ::std::collections::HashMap<::std::string::String, ::std::string::String>);
impl ::std::ops::Deref for Fruit {
type Target = ::std::collections::HashMap<::std::string::String, ::std::string::String>;
Expand Down
10 changes: 2 additions & 8 deletions typify-impl/src/type_entry.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1266,7 +1266,7 @@ impl TypeEntry {
) {
let TypeEntryNewtype {
name,
rename,
rename: _,
description,
default,
type_id,
Expand All @@ -1275,12 +1275,6 @@ impl TypeEntry {
} = newtype_details;
let doc = make_doc(name, description.as_ref(), schema);

let serde = rename.as_ref().map(|old_name| {
quote! {
#[serde(rename = #old_name)]
}
});

let type_name = format_ident!("{}", name);
let inner_type = type_space.id_to_entry.get(type_id).unwrap();
let inner_type_name = inner_type.type_ident(type_space, &None);
Expand Down Expand Up @@ -1571,7 +1565,7 @@ impl TypeEntry {
let item = quote! {
#doc
#[derive(#(#derives),*)]
#serde
#[serde(transparent)]
pub struct #type_name(#vis #inner_type_name);

impl ::std::ops::Deref for #type_name {
Expand Down
11 changes: 11 additions & 0 deletions typify-impl/tests/github.out
Original file line number Diff line number Diff line change
Expand Up @@ -19531,6 +19531,7 @@ impl ::std::convert::From<&CommitCommentCreatedComment> for CommitCommentCreated
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct CommitCommentEvent(pub CommitCommentCreated);
impl ::std::ops::Deref for CommitCommentEvent {
type Target = CommitCommentCreated;
Expand Down Expand Up @@ -19875,6 +19876,7 @@ impl ::std::convert::From<&ContentReferenceCreatedContentReference>
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct ContentReferenceEvent(pub ContentReferenceCreated);
impl ::std::ops::Deref for ContentReferenceEvent {
type Target = ContentReferenceCreated;
Expand Down Expand Up @@ -21087,6 +21089,7 @@ impl ::std::default::Default for DeploymentCreatedDeploymentPayload {
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct DeploymentEvent(pub DeploymentCreated);
impl ::std::ops::Deref for DeploymentEvent {
type Target = DeploymentCreated;
Expand Down Expand Up @@ -21664,6 +21667,7 @@ impl ::std::convert::From<&DeploymentStatusCreatedDeploymentStatus>
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct DeploymentStatusEvent(pub DeploymentStatusCreated);
impl ::std::ops::Deref for DeploymentStatusEvent {
type Target = DeploymentStatusCreated;
Expand Down Expand Up @@ -28088,6 +28092,7 @@ impl ::std::convert::From<chrono::DateTime<chrono::offset::Utc>> for ForkEventFo
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct GithubAppAuthorizationEvent(pub GithubAppAuthorizationRevoked);
impl ::std::ops::Deref for GithubAppAuthorizationEvent {
type Target = GithubAppAuthorizationRevoked;
Expand Down Expand Up @@ -50743,6 +50748,7 @@ impl ::std::convert::From<&IssuesUnlockedIssue> for IssuesUnlockedIssue {
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct IssuesUnlockedIssueActiveLockReason(());
impl ::std::ops::Deref for IssuesUnlockedIssueActiveLockReason {
type Target = ();
Expand Down Expand Up @@ -56601,6 +56607,7 @@ impl ::std::convert::TryFrom<::std::string::String> for MetaDeletedHookConfigCon
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct MetaEvent(pub MetaDeleted);
impl ::std::ops::Deref for MetaEvent {
type Target = MetaDeleted;
Expand Down Expand Up @@ -69491,6 +69498,7 @@ impl ::std::convert::From<&PullRequestOpenedPullRequest> for PullRequestOpenedPu
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct PullRequestOpenedPullRequestActiveLockReason(());
impl ::std::ops::Deref for PullRequestOpenedPullRequestActiveLockReason {
type Target = ();
Expand Down Expand Up @@ -81145,6 +81153,7 @@ impl ::std::convert::TryFrom<::std::string::String> for RepositoryDeletedAction
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct RepositoryDispatchEvent(pub RepositoryDispatchOnDemandTest);
impl ::std::ops::Deref for RepositoryDispatchEvent {
type Target = RepositoryDispatchOnDemandTest;
Expand Down Expand Up @@ -94890,6 +94899,7 @@ impl ::std::convert::TryFrom<::std::string::String> for UserType {
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct WatchEvent(pub WatchStarted);
impl ::std::ops::Deref for WatchEvent {
type Target = WatchStarted;
Expand Down Expand Up @@ -96842,6 +96852,7 @@ impl ::std::convert::From<&WorkflowJobStartedWorkflowJob> for WorkflowJobStarted
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct WorkflowJobStartedWorkflowJobConclusion(());
impl ::std::ops::Deref for WorkflowJobStartedWorkflowJobConclusion {
type Target = ();
Expand Down
23 changes: 23 additions & 0 deletions typify-impl/tests/vega.out
Original file line number Diff line number Diff line change
Expand Up @@ -11409,6 +11409,7 @@ impl ::std::convert::From<NumberValue> for AxisTranslate {
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct Background(pub StringOrSignal);
impl ::std::ops::Deref for Background {
type Target = StringOrSignal;
Expand Down Expand Up @@ -15365,6 +15366,7 @@ impl ::std::convert::TryFrom<::std::string::String> for BindVariant2Input {
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
#[serde(transparent)]
pub struct BindVariant3Input(::std::string::String);
impl ::std::ops::Deref for BindVariant3Input {
type Target = ::std::string::String;
Expand Down Expand Up @@ -22378,6 +22380,7 @@ impl ::std::convert::TryFrom<::std::string::String>
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
#[serde(transparent)]
pub struct DataVariant2FormatVariant0Subtype0ParseVariant1ValueVariant1(::std::string::String);
impl ::std::ops::Deref for DataVariant2FormatVariant0Subtype0ParseVariant1ValueVariant1 {
type Target = ::std::string::String;
Expand Down Expand Up @@ -22907,6 +22910,7 @@ impl ::std::convert::TryFrom<::std::string::String>
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
#[serde(transparent)]
pub struct DataVariant2FormatVariant0Subtype1ParseVariant1ValueVariant1(::std::string::String);
impl ::std::ops::Deref for DataVariant2FormatVariant0Subtype1ParseVariant1ValueVariant1 {
type Target = ::std::string::String;
Expand Down Expand Up @@ -23497,6 +23501,7 @@ impl ::std::convert::TryFrom<::std::string::String>
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
#[serde(transparent)]
pub struct DataVariant2FormatVariant0Subtype2ParseVariant1ValueVariant1(::std::string::String);
impl ::std::ops::Deref for DataVariant2FormatVariant0Subtype2ParseVariant1ValueVariant1 {
type Target = ::std::string::String;
Expand Down Expand Up @@ -24096,6 +24101,7 @@ impl ::std::convert::TryFrom<::std::string::String>
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
#[serde(transparent)]
pub struct DataVariant2FormatVariant0Subtype3ParseVariant1ValueVariant1(::std::string::String);
impl ::std::ops::Deref for DataVariant2FormatVariant0Subtype3ParseVariant1ValueVariant1 {
type Target = ::std::string::String;
Expand Down Expand Up @@ -25318,6 +25324,7 @@ impl ::std::convert::TryFrom<::std::string::String>
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
#[serde(transparent)]
pub struct DataVariant3FormatVariant0Subtype0ParseVariant1ValueVariant1(::std::string::String);
impl ::std::ops::Deref for DataVariant3FormatVariant0Subtype0ParseVariant1ValueVariant1 {
type Target = ::std::string::String;
Expand Down Expand Up @@ -25847,6 +25854,7 @@ impl ::std::convert::TryFrom<::std::string::String>
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
#[serde(transparent)]
pub struct DataVariant3FormatVariant0Subtype1ParseVariant1ValueVariant1(::std::string::String);
impl ::std::ops::Deref for DataVariant3FormatVariant0Subtype1ParseVariant1ValueVariant1 {
type Target = ::std::string::String;
Expand Down Expand Up @@ -26437,6 +26445,7 @@ impl ::std::convert::TryFrom<::std::string::String>
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
#[serde(transparent)]
pub struct DataVariant3FormatVariant0Subtype2ParseVariant1ValueVariant1(::std::string::String);
impl ::std::ops::Deref for DataVariant3FormatVariant0Subtype2ParseVariant1ValueVariant1 {
type Target = ::std::string::String;
Expand Down Expand Up @@ -27036,6 +27045,7 @@ impl ::std::convert::TryFrom<::std::string::String>
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
#[serde(transparent)]
pub struct DataVariant3FormatVariant0Subtype3ParseVariant1ValueVariant1(::std::string::String);
impl ::std::ops::Deref for DataVariant3FormatVariant0Subtype3ParseVariant1ValueVariant1 {
type Target = ::std::string::String;
Expand Down Expand Up @@ -30916,6 +30926,7 @@ impl ::std::convert::TryFrom<::std::string::String> for DotbinTransformType {
PartialEq,
PartialOrd,
)]
#[serde(transparent)]
pub struct Element(pub ::std::string::String);
impl ::std::ops::Deref for Element {
type Target = ::std::string::String;
Expand Down Expand Up @@ -30966,6 +30977,7 @@ impl ::std::fmt::Display for Element {
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct Encode(pub ::std::collections::HashMap<EncodeKey, EncodeEntry>);
impl ::std::ops::Deref for Encode {
type Target = ::std::collections::HashMap<EncodeKey, EncodeEntry>;
Expand Down Expand Up @@ -31557,6 +31569,7 @@ impl ::std::default::Default for EncodeEntry {
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
#[serde(transparent)]
pub struct EncodeKey(::std::string::String);
impl ::std::ops::Deref for EncodeKey {
type Target = ::std::string::String;
Expand Down Expand Up @@ -31838,6 +31851,7 @@ impl ::std::convert::From<&Expr> for Expr {
PartialEq,
PartialOrd,
)]
#[serde(transparent)]
pub struct ExprString(pub ::std::string::String);
impl ::std::ops::Deref for ExprString {
type Target = ::std::string::String;
Expand Down Expand Up @@ -38177,6 +38191,7 @@ impl ::std::convert::TryFrom<::std::string::String> for GeoshapeTransformType {
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct GradientStops(pub ::std::vec::Vec<GradientStopsItem>);
impl ::std::ops::Deref for GradientStops {
type Target = ::std::vec::Vec<GradientStopsItem>;
Expand Down Expand Up @@ -72653,6 +72668,7 @@ impl ::std::convert::From<BooleanOrSignal> for Markclip {
PartialEq,
PartialOrd,
)]
#[serde(transparent)]
pub struct Marktype(pub ::std::string::String);
impl ::std::ops::Deref for Marktype {
type Target = ::std::string::String;
Expand Down Expand Up @@ -76980,6 +76996,7 @@ impl ::std::convert::From<::std::boxed::Box<NumberValue>> for NumberValueVariant
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct OnEvents(pub ::std::vec::Vec<OnEventsItem>);
impl ::std::ops::Deref for OnEvents {
type Target = ::std::vec::Vec<OnEventsItem>;
Expand Down Expand Up @@ -77295,6 +77312,7 @@ impl ::std::convert::From<SignalRef> for OnEventsItemVariant1Update {
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct OnMarkTrigger(pub ::std::vec::Vec<OnMarkTriggerItem>);
impl ::std::ops::Deref for OnMarkTrigger {
type Target = ::std::vec::Vec<OnMarkTriggerItem>;
Expand Down Expand Up @@ -77401,6 +77419,7 @@ impl ::std::convert::From<&OnMarkTriggerItem> for OnMarkTriggerItem {
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct OnTrigger(pub ::std::vec::Vec<OnTriggerItem>);
impl ::std::ops::Deref for OnTrigger {
type Target = ::std::vec::Vec<OnTriggerItem>;
Expand Down Expand Up @@ -88345,6 +88364,7 @@ impl ::std::convert::TryFrom<::std::string::String> for ScaleDataVariant2SortVar
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct ScaleField(pub StringOrSignal);
impl ::std::ops::Deref for ScaleField {
type Target = StringOrSignal;
Expand Down Expand Up @@ -97939,6 +97959,7 @@ impl ::std::convert::From<MarkVisual> for ScopeMarksItem {
PartialEq,
PartialOrd,
)]
#[serde(transparent)]
pub struct Selector(pub ::std::string::String);
impl ::std::ops::Deref for Selector {
type Target = ::std::string::String;
Expand Down Expand Up @@ -98442,6 +98463,7 @@ impl ::std::convert::From<&Signal> for Signal {
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
#[serde(transparent)]
pub struct SignalName(::std::string::String);
impl ::std::ops::Deref for SignalName {
type Target = ::std::string::String;
Expand Down Expand Up @@ -108398,6 +108420,7 @@ impl ::std::default::Default for TitleVariant1Encode {
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
#[serde(transparent)]
pub struct TitleVariant1EncodeSubtype0Key(::std::string::String);
impl ::std::ops::Deref for TitleVariant1EncodeSubtype0Key {
type Target = ::std::string::String;
Expand Down
6 changes: 6 additions & 0 deletions typify/tests/schemas/arrays-and-tuples.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ pub mod error {
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct ArraySansItems(pub Vec<::serde_json::Value>);
impl ::std::ops::Deref for ArraySansItems {
type Target = Vec<::serde_json::Value>;
Expand Down Expand Up @@ -84,6 +85,7 @@ impl ::std::convert::From<Vec<::serde_json::Value>> for ArraySansItems {
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct LessSimpleTwoTuple(pub (::std::string::String, ::std::string::String));
impl ::std::ops::Deref for LessSimpleTwoTuple {
type Target = (::std::string::String, ::std::string::String);
Expand Down Expand Up @@ -122,6 +124,7 @@ impl ::std::convert::From<(::std::string::String, ::std::string::String)> for Le
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct SimpleTwoArray(pub [::std::string::String; 2usize]);
impl ::std::ops::Deref for SimpleTwoArray {
type Target = [::std::string::String; 2usize];
Expand Down Expand Up @@ -165,6 +168,7 @@ impl ::std::convert::From<[::std::string::String; 2usize]> for SimpleTwoArray {
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct SimpleTwoTuple(pub (::std::string::String, ::std::string::String));
impl ::std::ops::Deref for SimpleTwoTuple {
type Target = (::std::string::String, ::std::string::String);
Expand Down Expand Up @@ -208,6 +212,7 @@ impl ::std::convert::From<(::std::string::String, ::std::string::String)> for Si
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct UnsimpleTwoTuple(pub (::std::string::String, ::std::string::String));
impl ::std::ops::Deref for UnsimpleTwoTuple {
type Target = (::std::string::String, ::std::string::String);
Expand Down Expand Up @@ -247,6 +252,7 @@ impl ::std::convert::From<(::std::string::String, ::std::string::String)> for Un
#[doc = r" ```"]
#[doc = r" </details>"]
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
#[serde(transparent)]
pub struct YoloTwoArray(pub [::serde_json::Value; 2usize]);
impl ::std::ops::Deref for YoloTwoArray {
type Target = [::serde_json::Value; 2usize];
Expand Down
Loading

0 comments on commit fa65d74

Please sign in to comment.