Skip to content

Commit ed33dea

Browse files
committed
Temp
1 parent 26a9881 commit ed33dea

File tree

3 files changed

+56
-23
lines changed

3 files changed

+56
-23
lines changed

crates/apollo-smith/src/next/ast/mod.rs

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
use apollo_compiler::ast::{FieldDefinition, InterfaceTypeDefinition, ObjectTypeDefinition};
1+
use apollo_compiler::ast::{
2+
Definition, FieldDefinition, InterfaceTypeDefinition, ObjectTypeDefinition,
3+
};
24
use apollo_compiler::Node;
35

46
pub(crate) mod definition;
@@ -69,12 +71,12 @@ macro_rules! field_access {
6971
field_access!(ObjectTypeDefinition);
7072
field_access!(InterfaceTypeDefinition);
7173

72-
pub(crate) trait HasFields {
74+
pub(crate) trait DefinitionHasFields {
7375
fn fields(&self) -> &Vec<Node<FieldDefinition>>;
7476
fn fields_mut(&mut self) -> &mut Vec<Node<FieldDefinition>>;
7577
}
7678

77-
impl HasFields for ObjectTypeDefinition {
79+
impl DefinitionHasFields for ObjectTypeDefinition {
7880
fn fields(&self) -> &Vec<Node<FieldDefinition>> {
7981
&self.fields
8082
}
@@ -84,7 +86,7 @@ impl HasFields for ObjectTypeDefinition {
8486
}
8587
}
8688

87-
impl HasFields for InterfaceTypeDefinition {
89+
impl DefinitionHasFields for InterfaceTypeDefinition {
8890
fn fields(&self) -> &Vec<Node<FieldDefinition>> {
8991
&self.fields
9092
}
@@ -93,3 +95,22 @@ impl HasFields for InterfaceTypeDefinition {
9395
&mut self.fields
9496
}
9597
}
98+
99+
impl DefinitionHasFields for Definition {
100+
fn fields(&self) -> &Vec<Node<FieldDefinition>> {
101+
static EMPTY: Vec<Node<FieldDefinition>> = Vec::new();
102+
match self {
103+
Definition::ObjectTypeDefinition(d) => &d.fields,
104+
Definition::InterfaceTypeDefinition(d) => &d.fields,
105+
_ => &EMPTY,
106+
}
107+
}
108+
109+
fn fields_mut(&mut self) -> &mut Vec<Node<FieldDefinition>> {
110+
match self {
111+
Definition::ObjectTypeDefinition(d) => &mut d.fields,
112+
Definition::InterfaceTypeDefinition(d) => &mut d.fields,
113+
_ => panic!("fields_mut cannot be called on a definition that has no fields"),
114+
}
115+
}
116+
}

crates/apollo-smith/src/next/schema/mod.rs

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
use crate::next::ast::HasFields;
2-
use apollo_compiler::schema::{Component, InterfaceType, ObjectType};
1+
use apollo_compiler::ast::{FieldDefinition, Name};
2+
use apollo_compiler::schema::{Component, ExtendedType, InterfaceType, ObjectType};
3+
use apollo_compiler::Node;
4+
use indexmap::IndexMap;
35

46
pub(crate) mod extended_type;
57

@@ -68,24 +70,34 @@ macro_rules! field_access {
6870
field_access!(ObjectType);
6971
field_access!(InterfaceType);
7072

71-
impl HasFields for Component<ObjectType> {
72-
fn fields(
73-
&self,
74-
) -> &std::collections::HashMap<
75-
String,
76-
apollo_compiler::schema::Component<apollo_compiler::ast::FieldDefinition>,
77-
> {
73+
pub(crate) trait TypeHasFields {
74+
fn fields(&self) -> &IndexMap<Name, Component<FieldDefinition>>;
75+
fn random_field(&self, u:) -> Option<&Node<FieldDefinition>> {
76+
let mut fields = self.fields().values().collect::<Vec<_>>();
77+
fields.c()
78+
}
79+
80+
}
81+
82+
impl TypeHasFields for ObjectType {
83+
fn fields(&self) -> &IndexMap<Name, Component<FieldDefinition>> {
7884
&self.fields
7985
}
8086
}
8187

82-
impl HasFields for InterfaceType {
83-
fn fields(
84-
&self,
85-
) -> &std::collections::HashMap<
86-
String,
87-
apollo_compiler::schema::Component<apollo_compiler::ast::FieldDefinition>,
88-
> {
88+
impl TypeHasFields for InterfaceType {
89+
fn fields(&self) -> &IndexMap<Name, Component<FieldDefinition>> {
8990
&self.fields
9091
}
9192
}
93+
94+
impl TypeHasFields for ExtendedType {
95+
fn fields(&self) -> &IndexMap<Name, Component<FieldDefinition>> {
96+
static EMPTY: IndexMap<Name, Component<FieldDefinition>> = IndexMap::new();
97+
match self {
98+
ExtendedType::Object(t) => t.fields(),
99+
ExtendedType::Interface(t) => t.fields(),
100+
_ => &EMPTY,
101+
}
102+
}
103+
}

crates/apollo-smith/src/next/unstructured.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use apollo_compiler::schema::{ExtendedType, InterfaceType, ObjectType};
1313
use apollo_compiler::{Node, NodeStr, Schema};
1414

1515
use crate::next::ast::directive_definition::DirectiveDefinitionIterExt;
16-
use crate::next::ast::HasFields;
16+
use crate::next::ast::DefinitionHasFields;
1717
use crate::next::schema::extended_type::{ExtendedTypeExt, ExtendedTypeKind};
1818
use crate::next::schema::object_type::ObjectTypeExt;
1919
use crate::next::schema::schema::SchemaExt;
@@ -463,7 +463,7 @@ impl Unstructured<'_> {
463463
name: self.unique_name(),
464464
ty: Node::new(ty),
465465
default_value: self
466-
.arbitrary_optional(|u| Ok(Node::new(u.arbitrary_value(&ty, schema)?)))?,
466+
.arbitrary_optional(|u| Ok(Node::new(u.arbitrary_value(schema, &ty)?)))?,
467467
directives: schema
468468
.sample_directives(self)?
469469
.into_iter()
@@ -503,7 +503,7 @@ impl Unstructured<'_> {
503503
fn arbitrary_selection(
504504
&mut self,
505505
schema: &Schema,
506-
object_type: &dyn HasFields,
506+
object_type: &dyn super::schema::TypeHasFields,
507507
) -> Result<Selection> {
508508
if let Some(field) = object_type.random_field(self)? {
509509
match self.choose_index(3) {

0 commit comments

Comments
 (0)