From 5cebc37e7a2607fb5df398efc58d299f77c37455 Mon Sep 17 00:00:00 2001 From: Leonardo Yvens Schwarzstein Date: Sun, 22 Jul 2018 13:30:37 -0300 Subject: [PATCH 1/2] Derive `Default` for schema ast types This makes them easier to construct. --- src/schema/ast.rs | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/schema/ast.rs b/src/schema/ast.rs index ae89384..49febe3 100644 --- a/src/schema/ast.rs +++ b/src/schema/ast.rs @@ -6,7 +6,7 @@ use position::Pos; pub type NamedType = String; -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, Default, PartialEq)] pub struct Document { pub definitions: Vec, } @@ -19,7 +19,7 @@ pub enum Definition { DirectiveDefinition(DirectiveDefinition), } -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, Default, PartialEq)] pub struct SchemaDefinition { pub position: Pos, pub directives: Vec, @@ -48,7 +48,7 @@ pub enum TypeExtension { InputObject(InputObjectTypeExtension), } -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, Default, PartialEq)] pub struct ScalarType { pub position: Pos, pub description: Option, @@ -56,14 +56,14 @@ pub struct ScalarType { pub directives: Vec, } -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, Default, PartialEq)] pub struct ScalarTypeExtension { pub position: Pos, pub name: Name, pub directives: Vec, } -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, Default, PartialEq)] pub struct ObjectType { pub position: Pos, pub description: Option, @@ -73,7 +73,7 @@ pub struct ObjectType { pub fields: Vec, } -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, Default, PartialEq)] pub struct ObjectTypeExtension { pub position: Pos, pub name: Name, @@ -102,7 +102,7 @@ pub struct InputValue { pub directives: Vec, } -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, Default, PartialEq)] pub struct InterfaceType { pub position: Pos, pub description: Option, @@ -111,7 +111,7 @@ pub struct InterfaceType { pub fields: Vec, } -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, Default, PartialEq)] pub struct InterfaceTypeExtension { pub position: Pos, pub name: Name, @@ -119,7 +119,7 @@ pub struct InterfaceTypeExtension { pub fields: Vec, } -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, Default, PartialEq)] pub struct UnionType { pub position: Pos, pub description: Option, @@ -128,7 +128,7 @@ pub struct UnionType { pub types: Vec, } -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, Default, PartialEq)] pub struct UnionTypeExtension { pub position: Pos, pub name: Name, @@ -136,7 +136,7 @@ pub struct UnionTypeExtension { pub types: Vec, } -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, Default, PartialEq)] pub struct EnumType { pub position: Pos, pub description: Option, @@ -145,7 +145,7 @@ pub struct EnumType { pub values: Vec, } -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, Default, PartialEq)] pub struct EnumValue { pub position: Pos, pub description: Option, @@ -153,7 +153,7 @@ pub struct EnumValue { pub directives: Vec, } -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, Default, PartialEq)] pub struct EnumTypeExtension { pub position: Pos, pub name: Name, @@ -161,7 +161,7 @@ pub struct EnumTypeExtension { pub values: Vec, } -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, Default, PartialEq)] pub struct InputObjectType { pub position: Pos, pub description: Option, @@ -170,7 +170,7 @@ pub struct InputObjectType { pub fields: Vec, } -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, Default, PartialEq)] pub struct InputObjectTypeExtension { pub position: Pos, pub name: Name, @@ -203,7 +203,7 @@ pub enum DirectiveLocation { InputFieldDefinition, } -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, Default, PartialEq)] pub struct DirectiveDefinition { pub position: Pos, pub description: Option, From 7a3f75b59239f7ad3c03a725f7e4744b73096dc1 Mon Sep 17 00:00:00 2001 From: Leonardo Yvens Schwarzstein Date: Tue, 24 Jul 2018 15:28:21 -0300 Subject: [PATCH 2/2] replace `Default` derives with `fn new(name: Name)` --- src/schema/ast.rs | 189 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 175 insertions(+), 14 deletions(-) diff --git a/src/schema/ast.rs b/src/schema/ast.rs index 49febe3..cb5d88f 100644 --- a/src/schema/ast.rs +++ b/src/schema/ast.rs @@ -48,7 +48,7 @@ pub enum TypeExtension { InputObject(InputObjectTypeExtension), } -#[derive(Debug, Clone, Default, PartialEq)] +#[derive(Debug, Clone, PartialEq)] pub struct ScalarType { pub position: Pos, pub description: Option, @@ -56,14 +56,35 @@ pub struct ScalarType { pub directives: Vec, } -#[derive(Debug, Clone, Default, PartialEq)] +impl ScalarType { + pub fn new(name: Name) -> Self { + Self { + position: Pos::default(), + description: None, + name, + directives: vec![], + } + } +} + +#[derive(Debug, Clone, PartialEq)] pub struct ScalarTypeExtension { pub position: Pos, pub name: Name, pub directives: Vec, } -#[derive(Debug, Clone, Default, PartialEq)] +impl ScalarTypeExtension { + pub fn new(name: Name) -> Self { + Self { + position: Pos::default(), + name, + directives: vec![], + } + } +} + +#[derive(Debug, Clone, PartialEq)] pub struct ObjectType { pub position: Pos, pub description: Option, @@ -73,7 +94,20 @@ pub struct ObjectType { pub fields: Vec, } -#[derive(Debug, Clone, Default, PartialEq)] +impl ObjectType { + pub fn new(name: Name) -> Self { + Self { + position: Pos::default(), + description: None, + name, + implements_interfaces: vec![], + directives: vec![], + fields: vec![], + } + } +} + +#[derive(Debug, Clone, PartialEq)] pub struct ObjectTypeExtension { pub position: Pos, pub name: Name, @@ -82,6 +116,18 @@ pub struct ObjectTypeExtension { pub fields: Vec, } +impl ObjectTypeExtension { + pub fn new(name: Name) -> Self { + Self { + position: Pos::default(), + name, + implements_interfaces: vec![], + directives: vec![], + fields: vec![], + } + } +} + #[derive(Debug, Clone, PartialEq)] pub struct Field { pub position: Pos, @@ -102,7 +148,7 @@ pub struct InputValue { pub directives: Vec, } -#[derive(Debug, Clone, Default, PartialEq)] +#[derive(Debug, Clone, PartialEq)] pub struct InterfaceType { pub position: Pos, pub description: Option, @@ -111,7 +157,19 @@ pub struct InterfaceType { pub fields: Vec, } -#[derive(Debug, Clone, Default, PartialEq)] +impl InterfaceType { + pub fn new(name: Name) -> Self { + Self { + position: Pos::default(), + description: None, + name, + directives: vec![], + fields: vec![], + } + } +} + +#[derive(Debug, Clone, PartialEq)] pub struct InterfaceTypeExtension { pub position: Pos, pub name: Name, @@ -119,7 +177,18 @@ pub struct InterfaceTypeExtension { pub fields: Vec, } -#[derive(Debug, Clone, Default, PartialEq)] +impl InterfaceTypeExtension { + pub fn new(name: Name) -> Self { + Self { + position: Pos::default(), + name, + directives: vec![], + fields: vec![], + } + } +} + +#[derive(Debug, Clone, PartialEq)] pub struct UnionType { pub position: Pos, pub description: Option, @@ -128,7 +197,19 @@ pub struct UnionType { pub types: Vec, } -#[derive(Debug, Clone, Default, PartialEq)] +impl UnionType { + pub fn new(name: Name) -> Self { + Self { + position: Pos::default(), + description: None, + name, + directives: vec![], + types: vec![], + } + } +} + +#[derive(Debug, Clone, PartialEq)] pub struct UnionTypeExtension { pub position: Pos, pub name: Name, @@ -136,7 +217,18 @@ pub struct UnionTypeExtension { pub types: Vec, } -#[derive(Debug, Clone, Default, PartialEq)] +impl UnionTypeExtension { + pub fn new(name: Name) -> Self { + Self { + position: Pos::default(), + name, + directives: vec![], + types: vec![], + } + } +} + +#[derive(Debug, Clone, PartialEq)] pub struct EnumType { pub position: Pos, pub description: Option, @@ -145,7 +237,19 @@ pub struct EnumType { pub values: Vec, } -#[derive(Debug, Clone, Default, PartialEq)] +impl EnumType { + pub fn new(name: Name) -> Self { + Self { + position: Pos::default(), + description: None, + name, + directives: vec![], + values: vec![], + } + } +} + +#[derive(Debug, Clone, PartialEq)] pub struct EnumValue { pub position: Pos, pub description: Option, @@ -153,7 +257,18 @@ pub struct EnumValue { pub directives: Vec, } -#[derive(Debug, Clone, Default, PartialEq)] +impl EnumValue { + pub fn new(name: Name) -> Self { + Self { + position: Pos::default(), + description: None, + name, + directives: vec![], + } + } +} + +#[derive(Debug, Clone, PartialEq)] pub struct EnumTypeExtension { pub position: Pos, pub name: Name, @@ -161,7 +276,18 @@ pub struct EnumTypeExtension { pub values: Vec, } -#[derive(Debug, Clone, Default, PartialEq)] +impl EnumTypeExtension { + pub fn new(name: Name) -> Self { + Self { + position: Pos::default(), + name, + directives: vec![], + values: vec![], + } + } +} + +#[derive(Debug, Clone, PartialEq)] pub struct InputObjectType { pub position: Pos, pub description: Option, @@ -170,7 +296,19 @@ pub struct InputObjectType { pub fields: Vec, } -#[derive(Debug, Clone, Default, PartialEq)] +impl InputObjectType { + pub fn new(name: Name) -> Self { + Self { + position: Pos::default(), + description: None, + name, + directives: vec![], + fields: vec![], + } + } +} + +#[derive(Debug, Clone, PartialEq)] pub struct InputObjectTypeExtension { pub position: Pos, pub name: Name, @@ -178,6 +316,17 @@ pub struct InputObjectTypeExtension { pub fields: Vec, } +impl InputObjectTypeExtension { + pub fn new(name: Name) -> Self { + Self { + position: Pos::default(), + name, + directives: vec![], + fields: vec![], + } + } +} + #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum DirectiveLocation { // executable @@ -203,7 +352,7 @@ pub enum DirectiveLocation { InputFieldDefinition, } -#[derive(Debug, Clone, Default, PartialEq)] +#[derive(Debug, Clone, PartialEq)] pub struct DirectiveDefinition { pub position: Pos, pub description: Option, @@ -212,6 +361,18 @@ pub struct DirectiveDefinition { pub locations: Vec, } +impl DirectiveDefinition { + pub fn new(name: Name) -> Self { + Self { + position: Pos::default(), + description: None, + name, + arguments: vec![], + locations: vec![], + } + } +} + impl DirectiveLocation { /// Returns GraphQL syntax compatible name of the directive pub fn as_str(&self) -> &'static str {