///|
pub(all) enum TerrainSourceTrust {
Authoritative
CuratedFixture
DerivedProduct
Experimental
UnknownTrust
} derive(Debug, Eq, ToJson, FromJson)
///|
pub(all) enum TerrainSourceReviewStatus {
AcceptedForSoftwareProof
NeedsSourceUpgrade
NeedsHumanReview
Rejected
} derive(Debug, Eq, ToJson, FromJson)
///|
pub(all) enum TerrainSourceChecksumKind {
InlineFixtureFingerprint
Sha256
UnknownChecksumKind
} derive(Debug, Eq, ToJson, FromJson)
///|
pub(all) struct TerrainSourceManifest {
dataset_id : @core.DatasetId
title : String
source_url : String
license : String
product_type : String
trust : TerrainSourceTrust
claim_kind : @core.ClaimKind
coverage : @core.LunarBounds
resolution_m : Double
source_path : String
source_sha256 : String
extractor : String
checksum_kind : TerrainSourceChecksumKind
checksum : String
citation : String
review_status : TerrainSourceReviewStatus
notes : Array[String]
} derive(Debug, Eq, ToJson, FromJson)
///|
fn review_status_from_lunar(
status : @lunar_data.LunarReviewStatus,
) -> TerrainSourceReviewStatus {
match status {
@lunar_data.LunarReviewStatus::AcceptedForSoftwareProof =>
AcceptedForSoftwareProof
@lunar_data.LunarReviewStatus::NeedsSourceUpgrade => NeedsSourceUpgrade
@lunar_data.LunarReviewStatus::NeedsHumanReview => NeedsHumanReview
@lunar_data.LunarReviewStatus::Rejected => Rejected
}
}
///|
fn claim_kind_from_lunar(label : String) -> @core.ClaimKind {
match label {
"measured" => @core.ClaimKind::Measured
"derived" => @core.ClaimKind::Derived
"simulated" => @core.ClaimKind::Simulated
"assumed" => @core.ClaimKind::Assumed
_ => @core.ClaimKind::Unknown
}
}
///|
fn terrain_source_manifest_from_lunar(
record : @lunar_data.LunarTerrainDatasetRecord,
) -> TerrainSourceManifest {
let source = @lunar_data.first_trusted_square_lola_source()
let product = @lunar_data.first_trusted_square_lola_product_selection()
let extraction = record.extraction
{
dataset_id: record.dataset_id,
title: record.title,
source_url: product.image_url,
license: source.license,
product_type: record.product_type,
trust: Authoritative,
claim_kind: claim_kind_from_lunar(extraction.claim_kind),
coverage: {
south_deg: extraction.coverage.south_deg,
north_deg: extraction.coverage.north_deg,
west_deg: extraction.coverage.west_deg,
east_deg: extraction.coverage.east_deg,
},
resolution_m: extraction.coverage.resolution_m,
source_path: extraction.output_path,
source_sha256: extraction.output_sha256,
extractor: "MoonBit source extraction -> \{extraction.output_path} -> MoonBit fixture generator -> src/terrain/generated_first_trusted_square_fixture.mbt",
checksum_kind: InlineFixtureFingerprint,
checksum: record.inline_fingerprint,
citation: record.citation,
review_status: review_status_from_lunar(extraction.review_status),
notes: record.notes,
}
}
///|
pub fn terrain_source_trust_label(trust : TerrainSourceTrust) -> String {
match trust {
Authoritative => "authoritative"
CuratedFixture => "curated-fixture"
DerivedProduct => "derived-product"
Experimental => "experimental"
UnknownTrust => "unknown"
}
}
///|
pub fn terrain_source_review_status_label(
status : TerrainSourceReviewStatus,
) -> String {
match status {
AcceptedForSoftwareProof => "accepted-for-software-proof"
NeedsSourceUpgrade => "needs-source-upgrade"
NeedsHumanReview => "needs-human-review"
Rejected => "rejected"
}
}
///|
pub fn terrain_source_checksum_kind_label(
kind : TerrainSourceChecksumKind,
) -> String {
match kind {
InlineFixtureFingerprint => "inline-fixture-fingerprint"
Sha256 => "sha256"
UnknownChecksumKind => "unknown"
}
}
///|
pub fn terrain_source_provenance(
manifest : TerrainSourceManifest,
) -> @core.Provenance {
{
dataset_id: manifest.dataset_id,
source_title: manifest.title,
source_url: manifest.source_url,
license: manifest.license,
product_type: manifest.product_type,
claim_kind: manifest.claim_kind,
generated_by: "terrain-source-manifest",
}
}
///|
pub fn first_trusted_square_source_manifest() -> TerrainSourceManifest {
terrain_source_manifest_from_lunar(
@lunar_data.first_trusted_square_lola_terrain_dataset_record(),
)
}
///|
pub fn first_trusted_square_west_contour_source_manifest() -> TerrainSourceManifest {
terrain_source_manifest_from_lunar(
@lunar_data.first_trusted_square_west_contour_lola_terrain_dataset_record(),
)
}
///|
pub fn first_trusted_square_north_rim_source_manifest() -> TerrainSourceManifest {
terrain_source_manifest_from_lunar(
@lunar_data.first_trusted_square_north_rim_lola_terrain_dataset_record(),
)
}
///|
pub fn first_trusted_square_southwest_bypass_source_manifest() -> TerrainSourceManifest {
terrain_source_manifest_from_lunar(
@lunar_data.first_trusted_square_southwest_bypass_lola_terrain_dataset_record(),
)
}
///|
pub fn first_trusted_square_south_stepout_source_manifest() -> TerrainSourceManifest {
terrain_source_manifest_from_lunar(
@lunar_data.first_trusted_square_south_stepout_lola_terrain_dataset_record(),
)
}
///|
pub fn first_trusted_square_northeast_stepout_source_manifest() -> TerrainSourceManifest {
terrain_source_manifest_from_lunar(
@lunar_data.first_trusted_square_northeast_stepout_lola_terrain_dataset_record(),
)
}
///|
pub fn first_trusted_square_route_source_manifests() -> Array[
TerrainSourceManifest,
] {
[
first_trusted_square_west_contour_source_manifest(),
first_trusted_square_north_rim_source_manifest(),
first_trusted_square_southwest_bypass_source_manifest(),
first_trusted_square_south_stepout_source_manifest(),
first_trusted_square_northeast_stepout_source_manifest(),
]
}