use crate::spec::Property;
use std::collections::HashSet;
use std::path::Path;
use crate::generate::archetypes::Archetype;
use crate::generate::archetypes::TestInput;
use crate::enforce::category::Category;
use crate::generate::emit::emit::{write_test, EmittedTest};
use crate::generate::emit::naming::{sanitize, test_name};
use crate::generate::emit::provenance::{header, SourceTuple};
use crate::generate::emit::seed::SeedStream;
use crate::generate::emit::{GenError, GeneratedFile, GenerationPlan, GenerationReport, TemplateKind};
use crate::adversarial::mutations::catalog::applied::applied_for_classes;
use crate::spec::{OracleKind, SpecRow};
use crate::generate::templates::{render, TemplateContext};
use crate::spec::types::OpSpec;
use super::codegen::{expected_bytes, law_name, route_key, rust_test, spec_row_index};
use super::util::{input_bytes_for_arity, last_segment, oracle_name, property_key, template_src};
fn push_route(
op: &OpSpec,
routes: &mut Vec<Route>,
property: Property,
property_label: String,
template: TemplateKind,
input_index: usize,
) {
let route_id = property_key(&property);
push_route_with_metadata(
op,
routes,
property,
property_label,
template,
input_index,
route_id,
None,
None,
);
}