Documentation
@derive(Debug, Serialize, Deserialize)
struct ArtifactHir {
    string lang;
    ::xidl_parser::hir::Specification hir;
    ::xidl_parser::hir::ParserProperties props;
};

@derive(Debug, Serialize, Deserialize)
struct ArtifactHttpHir {
    string lang;
    ::xidl_parser::hir::Specification hir;
    ::xidlc::generate::http_hir::HttpHirDocument http_hir;
    ::xidl_parser::hir::ParserProperties props;
};

@derive(Debug, Serialize, Deserialize)
struct ArtifactFile {
    string path;
    string content;
};

@derive(Debug, Serialize, Deserialize)
enum ArtifactKind {
    Hir,
    HttpHir,
    File
};

@derive(Serialize, Deserialize)
union Artifact switch (ArtifactKind) {
    case ArtifactKind::Hir:
        ArtifactHir hir;
    case ArtifactKind::HttpHir:
        ArtifactHttpHir http_hir;
    case ArtifactKind::File:
        ArtifactFile file;
};

interface Codegen {
    string get_engine_version();

    ::xidl_parser::hir::ParserProperties get_properties();

    sequence<Artifact> generate(
        in ::xidl_parser::hir::Specification hir,
        in string path,
        in ::xidl_parser::hir::ParserProperties props
    );

};