Skip to content

A function to generate a type whose parameters are non null #506

@akhildevelops

Description

@akhildevelops

I have below graphql schema (it's subset of my schema file) and all the fields for PodFindAndDeployOnDemandInput input type aren't mandatory except for the countryCode

# Input Type
input PodFindAndDeployOnDemandInput{
    aiApiId:String	
    cloudType:CloudTypeEnum	
    containerDiskInGb:Int	
    countryCode:String!
    deployCost:Float	
    dockerArgs:String	
    env:[EnvironmentVariableInput]	
    gpuCount:Int	
    gpuTypeId:String	
    gpuTypeIdList:[String]	
    imageName:String	
    minDisk:Int	
    minDownload:Int	
    minMemoryInGb:Int	
    minUpload:Int	
    minVcpuCount:Int	
    name:String	
    networkVolumeId:String	
    port:Port	
    ports:String	
    startJupyter:Boolean	
    startSsh:Boolean	
    stopAfter:DateTime	
    supportPublicIp:Boolean	
    templateId:String	
    terminateAfter:DateTime	
    volumeInGb:Int	
    volumeKey:String	
    volumeMountPath:String	
    dataCenterId:String	
    savingsPlan:SavingsPlanInput	
    cudaVersion:String	
    allowedCudaVersions:[String]	
    instanceIds:[String]	
    computeType:ComputeType
}

# Mutation
type Mutation{
    podFindAndDeployOnDemand(input:PodFindAndDeployOnDemandInput!): Pod
}

#Output type of above mutation
type Pod{
    lowestBidPriceToResume: Float
    aiApiId: String
    apiKey: String
    consumerUserId: String	
    containerDiskInGb: Int
    containerRegistryAuthId: String
    costMultiplier: Float
    costPerHr: Float!
    createdAt: DateTime
    adjustedCostPerHr: Float!	
    desiredStatus: PodStatus!
    dockerArgs: String
    dockerId: String
    env: [String]
    gpuCount: Int!
    gpuPowerLimitPercent: Int!
    gpus: [Gpu]!
    id: String!
    imageName: String!
    lastStatusChange: String
    locked: Boolean
    machineId: String!
    memoryInGb: Float!	
    name: String!
    podType: PodType
    port: Port
    ports: String
    registry: PodRegistry
    templateId: String
    uptimeSeconds: Int
    vcpuCount: Float!
    version: Int
    volumeEncrypted: Boolean!
    volumeInGb: Float
    volumeKey: String
    volumeMountPath: String
    lastStartedAt: DateTime
    cpuFlavorId: String
    machineType: String
    slsVersion: Int	
    networkVolumeId: String	
    cpuFlavor: CpuFlavor	
    runtime: PodRuntime	
    machine: PodMachineInfo	
    latestTelemetry: PodTelemetry	
    endpoint: Endpoint	
    networkVolume: NetworkVolume	
    savingsPlans: [SavingsPlan]	
}

The equivalent rust generated code for input type is:

pub struct PodFindAndDeployOnDemandInput {
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "aiApiId")]
            pub ai_api_id: Option<String>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "cloudType")]
            pub cloud_type: Option<CloudTypeEnum>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "containerDiskInGb")]
            pub container_disk_in_gb: Option<Int>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "countryCode")]
            pub country_code: String,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "deployCost")]
            pub deploy_cost: Option<Float>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "dockerArgs")]
            pub docker_args: Option<String>,
            #[serde(skip_serializing_if = "Option::is_none")]
            pub env: Option<Vec<Option<EnvironmentVariableInput>>>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "gpuCount")]
            pub gpu_count: Option<Int>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "gpuTypeId")]
            pub gpu_type_id: Option<String>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "gpuTypeIdList")]
            pub gpu_type_id_list: Option<Vec<Option<String>>>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "imageName")]
            pub image_name: Option<String>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "minDisk")]
            pub min_disk: Option<Int>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "minDownload")]
            pub min_download: Option<Int>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "minMemoryInGb")]
            pub min_memory_in_gb: Option<Int>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "minUpload")]
            pub min_upload: Option<Int>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "minVcpuCount")]
            pub min_vcpu_count: Option<Int>,
            #[serde(skip_serializing_if = "Option::is_none")]
            pub name: Option<String>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "networkVolumeId")]
            pub network_volume_id: Option<String>,
            #[serde(skip_serializing_if = "Option::is_none")]
            pub port: Option<Port>,
            #[serde(skip_serializing_if = "Option::is_none")]
            pub ports: Option<String>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "startJupyter")]
            pub start_jupyter: Option<Boolean>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "startSsh")]
            pub start_ssh: Option<Boolean>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "stopAfter")]
            pub stop_after: Option<DateTime>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "supportPublicIp")]
            pub support_public_ip: Option<Boolean>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "templateId")]
            pub template_id: Option<String>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "terminateAfter")]
            pub terminate_after: Option<DateTime>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "volumeInGb")]
            pub volume_in_gb: Option<Int>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "volumeKey")]
            pub volume_key: Option<String>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "volumeMountPath")]
            pub volume_mount_path: Option<String>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "dataCenterId")]
            pub data_center_id: Option<String>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "savingsPlan")]
            pub savings_plan: Option<SavingsPlanInput>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "cudaVersion")]
            pub cuda_version: Option<String>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "allowedCudaVersions")]
            pub allowed_cuda_versions: Option<Vec<Option<String>>>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "instanceIds")]
            pub instance_ids: Option<Vec<Option<String>>>,
            #[serde(skip_serializing_if = "Option::is_none")]
            #[serde(rename = "computeType")]
            pub compute_type: Option<ComputeType>,
        }

Creating PodFindAndDeployOnDemandInput is verbose if the all fields default to None and the only required field is countryCode

expecting a function to generate PodFindAndDeployOnDemandInput type by taking non null as argument i.e, countryCode

fn gen_PodFindAndDeployOnDemandInput(countryCode:String)->PodFindAndDeployOnDemandInput{
           PodFindAndDeployOnDemandInput{
                                  countryCode,
                                  ai_api_id: None,
                                  cloud_type: None,
                                   ....
                                   ....          
           }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions