Complete example
This example defines condition vocabularies, four entities, one transport
mutation, and a delivery task. The DSL parser and resolver test suite checks the
same source file. The developer documentation test also runs it through the
manifold-dsl check command.
condition readiness [
not_ready
ready
]
condition cleanliness [
clean
dirty
contaminated
]
entity "van-110" {
description {
name = "White VW van"
plate = "ABC-123"
}
capacities {
payload_mass = 800 kg
fuel_volume = 60 l
}
properties {
payload_mass = 0 kg
curb_mass = 1800 kg
fuel_volume = 50 l
fuel_per_distance = 0.08 l/km
speed = 70 km/h
located_at = @"hq".properties.located_at
}
traits [
vehicle
van
diesel
]
conditions {
readiness = ready
cleanliness = clean
}
}
entity "cargo-42" {
properties {
mass = 120 kg
located_at = @"hq".properties.located_at
}
traits [
cargo
]
}
entity "hq" {
traits [
location
]
properties {
located_at = location(59.3293, 18.0686)
}
}
entity "workshop" {
traits [
location
]
properties {
located_at = location(59.3498, 18.0707)
}
}
mutation "transport-payload" {
roles [
van
payload
destination
]
requires {
@van.traits.vehicle
@van.conditions.readiness = ready
@payload.traits.cargo
@destination.traits.location
@van.properties.located_at = @payload.properties.located_at
@destination.properties.located_at
@van.capacities.payload_mass
@payload.properties.mass
@van.properties.fuel_volume
@van.properties.fuel_per_distance
}
uses {
observe [
@destination.properties.located_at
]
reserve [
@van
@payload
]
occupy {
@van.capacities.payload_mass += @payload.properties.mass
}
}
transforms {
@van.properties.fuel_volume -=
$distance * @van.properties.fuel_per_distance
@van.properties.located_at -> @destination.properties.located_at
@payload.properties.located_at -> @destination.properties.located_at
}
}
task "deliver-cargo-42" {
desired {
@"cargo-42".properties.located_at = @"workshop".properties.located_at
}
}
The example is a language fixture. Checking it proves that the current parser and resolver accept it. It does not run the transport mutation or produce a delivery plan.