type Query {
    shippingMethods(options: ShippingMethodListOptions): ShippingMethodList!
    shippingMethod(id: ID!): ShippingMethod
    shippingEligibilityCheckers: [ConfigurableOperationDefinition!]!
    shippingCalculators: [ConfigurableOperationDefinition!]!
    testShippingMethod(input: TestShippingMethodInput!): TestShippingMethodResult!
    testEligibleShippingMethods(input: TestEligibleShippingMethodsInput!): [ShippingMethodQuote!]!
}

type Mutation {
    "Create a new ShippingMethod"
    createShippingMethod(input: CreateShippingMethodInput!): ShippingMethod!
    "Update an existing ShippingMethod"
    updateShippingMethod(input: UpdateShippingMethodInput!): ShippingMethod!
    "Delete a ShippingMethod"
    deleteShippingMethod(id: ID!): DeletionResponse!
}

# generated by generateListOptions function
input ShippingMethodListOptions

input CreateShippingMethodInput {
    code: String!
    description: String!
    checker: ConfigurableOperationInput!
    calculator: ConfigurableOperationInput!
}

input UpdateShippingMethodInput {
    id: ID!
    code: String
    description: String
    checker: ConfigurableOperationInput
    calculator: ConfigurableOperationInput
}

input TestShippingMethodInput {
    checker: ConfigurableOperationInput!
    calculator: ConfigurableOperationInput!
    shippingAddress: CreateAddressInput!
    lines: [TestShippingMethodOrderLineInput!]!
}

input TestEligibleShippingMethodsInput {
    shippingAddress: CreateAddressInput!
    lines: [TestShippingMethodOrderLineInput!]!
}

input TestShippingMethodOrderLineInput {
    productVariantId: ID!
    quantity: Int!
}

type TestShippingMethodResult {
    eligible: Boolean!
    quote: TestShippingMethodQuote
}

type TestShippingMethodQuote {
    price: Int!
    priceWithTax: Int!
    description: String!
    metadata: JSON
}
