mirror of
https://github.com/kjuulh/dagger-rs.git
synced 2024-11-22 15:22:13 +01:00
add collection of types
This commit is contained in:
parent
2eb5d98c8a
commit
7433453c6d
@ -1,5 +1,5 @@
|
|||||||
use graphql_introspection_query::introspection_response::{
|
use graphql_introspection_query::introspection_response::{
|
||||||
FullType, IntrospectionResponse, Schema, SchemaContainer,
|
self, FullType, IntrospectionResponse, Schema, SchemaTypes,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub struct CodeGeneration;
|
pub struct CodeGeneration;
|
||||||
@ -20,25 +20,78 @@ impl CodeGeneration {
|
|||||||
let mut output = String::new();
|
let mut output = String::new();
|
||||||
output.push_str("# code generated by dagger. DO NOT EDIT.");
|
output.push_str("# code generated by dagger. DO NOT EDIT.");
|
||||||
|
|
||||||
|
let types = get_types(schema)?;
|
||||||
|
//let remaining: Vec<Option<String>> = types.into_iter().map(type_name).collect();
|
||||||
|
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_types(schema: &Schema) -> eyre::Result<Vec<&FullType>> {
|
||||||
let types = schema
|
let types = schema
|
||||||
.types
|
.types
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.ok_or(eyre::anyhow!("types not found on schema"))?;
|
.ok_or(eyre::anyhow!("types not found on schema"))?;
|
||||||
|
|
||||||
// 1. Get a list of all types and map it to handlers
|
// 1. Get a list of all types and map it to handlers
|
||||||
let types: Vec<Option<&FullType>> = types
|
let types: Vec<&FullType> = types
|
||||||
.iter()
|
.iter()
|
||||||
.map(|t| t.as_ref().map(|t| &t.full_type))
|
.map(|t| t.as_ref().map(|t| &t.full_type))
|
||||||
|
.flatten()
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
for t in types.iter().flatten() {
|
Ok(types)
|
||||||
println!("type: {:?}", t.name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. Filter all custom types and change so that they take input instead
|
fn type_name(t: &FullType) -> Option<String> {
|
||||||
|
let name = t.name.as_ref();
|
||||||
todo!()
|
if let Some(name) = name {
|
||||||
|
if name.starts_with("_") || !is_custom_scalar_type(t) {
|
||||||
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return Some(name.replace("Query", "Client"));
|
||||||
|
}
|
||||||
|
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
|
fn is_scalar_type(t: &FullType) -> bool {
|
||||||
|
if let Some(introspection_response::__TypeKind::SCALAR) = t.kind {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Scalars {
|
||||||
|
ID(String),
|
||||||
|
Int(usize),
|
||||||
|
String(String),
|
||||||
|
Float(f64),
|
||||||
|
Boolean(bool),
|
||||||
|
Date(String),
|
||||||
|
DateTime(String),
|
||||||
|
Time(String),
|
||||||
|
Decimal(f64),
|
||||||
|
}
|
||||||
|
|
||||||
|
fn is_custom_scalar_type(t: &FullType) -> bool {
|
||||||
|
if is_scalar_type(t) {
|
||||||
|
let _ = match t.name.as_ref().map(|s| s.as_str()) {
|
||||||
|
Some("ID") => Scalars::ID("ID".into()),
|
||||||
|
Some("Int") => Scalars::Int(0),
|
||||||
|
Some("String") => Scalars::String("ID".into()),
|
||||||
|
Some("Float") => Scalars::Float(0.0),
|
||||||
|
Some("Boolean") => Scalars::Boolean(false),
|
||||||
|
Some("Date") => Scalars::Date("ID".into()),
|
||||||
|
Some("DateTime") => Scalars::DateTime("ID".into()),
|
||||||
|
Some("Time") => Scalars::Time("ID".into()),
|
||||||
|
Some("Decimal") => Scalars::Decimal(0.0),
|
||||||
|
Some(_) => return true,
|
||||||
|
None => return false,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
Loading…
Reference in New Issue
Block a user