mirror of
https://github.com/kjuulh/dagger-rs.git
synced 2025-02-23 08:11:12 +01:00
with opts
This commit is contained in:
parent
427e47c675
commit
61eb9f3228
@ -5,12 +5,16 @@ pub fn format_name(s: &str) -> String {
|
|||||||
s.to_case(Case::Pascal)
|
s.to_case(Case::Pascal)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn format_struct_name(s: &str) -> String {
|
||||||
|
s.to_case(Case::Snake)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn field_options_struct_name(field: &FullTypeFields) -> Option<String> {
|
pub fn field_options_struct_name(field: &FullTypeFields) -> Option<String> {
|
||||||
field
|
field
|
||||||
.parent_type
|
.parent_type
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.map(|p| p.name.as_ref())
|
.map(|p| p.name.as_ref().map(|n| format_name(n)))
|
||||||
.flatten()
|
.flatten()
|
||||||
.zip(field.name.as_ref())
|
.zip(field.name.as_ref().map(|n| format_name(n)))
|
||||||
.map(|(parent_name, field_name)| format!("{parent_name}{field_name}Opts"))
|
.map(|(parent_name, field_name)| format!("{parent_name}{field_name}Opts"))
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
use dagger_core::introspection::{FullType, FullTypeFields};
|
use dagger_core::introspection::{FullType, FullTypeFields, FullTypeFieldsArgs};
|
||||||
use genco::prelude::rust;
|
use genco::prelude::rust;
|
||||||
use genco::quote;
|
use genco::quote;
|
||||||
|
|
||||||
use crate::functions::CommonFunctions;
|
use crate::functions::CommonFunctions;
|
||||||
use crate::rust::functions::{field_options_struct_name, format_name};
|
use crate::rust::functions::{field_options_struct_name, format_name, format_struct_name};
|
||||||
use crate::utility::OptionExt;
|
use crate::utility::OptionExt;
|
||||||
|
|
||||||
pub fn render_object(funcs: &CommonFunctions, t: &FullType) -> eyre::Result<rust::Tokens> {
|
pub fn render_object(funcs: &CommonFunctions, t: &FullType) -> eyre::Result<rust::Tokens> {
|
||||||
@ -40,12 +40,38 @@ fn render_optional_args(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn render_optional_arg(funcs: &CommonFunctions, field: &FullTypeFields) -> Option<rust::Tokens> {
|
fn render_optional_arg(funcs: &CommonFunctions, field: &FullTypeFields) -> Option<rust::Tokens> {
|
||||||
field
|
let output_type = field_options_struct_name(field);
|
||||||
.type_
|
let fields = field
|
||||||
.pipe(|t| funcs.format_output_type(&t.type_ref))
|
.args
|
||||||
.pipe(|f| {
|
.pipe(|t| t.into_iter().flatten().collect::<Vec<_>>())
|
||||||
quote! {
|
.pipe(|t| render_optional_field_args(funcs, t))
|
||||||
$f
|
.flatten();
|
||||||
|
|
||||||
|
if let Some(fields) = fields {
|
||||||
|
Some(quote! {
|
||||||
|
pub struct $output_type {
|
||||||
|
$fields
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn render_optional_field_args(
|
||||||
|
funcs: &CommonFunctions,
|
||||||
|
args: &Vec<&FullTypeFieldsArgs>,
|
||||||
|
) -> Option<rust::Tokens> {
|
||||||
|
if args.len() == 0 {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
let rendered_args = args.into_iter().map(|a| &a.input_value).map(|a| {
|
||||||
|
quote! {
|
||||||
|
pub $(format_struct_name(&a.name)): $(funcs.format_output_type(&a.type_))
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Some(quote! {
|
||||||
|
$(for arg in rendered_args join ($['\r']) => $arg)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user