summa-proto 0.36.1

Summa search server proto files
Documentation
fn main() -> Result<(), Box<dyn std::error::Error>> {
    std::env::set_var("PROTOC", protoc_bin_vendored::protoc_bin_path().unwrap());
    let files = &[
        "proto/consumer_service.proto",
        "proto/dag_pb.proto",
        "proto/index_service.proto",
        "proto/query.proto",
        "proto/public_service.proto",
        "proto/reflection_service.proto",
        "proto/search_service.proto",
        "proto/unixfs.proto",
        "proto/utils.proto",
    ];
    let serde_default_structs = &[
        "dag_pb.PBNode",
        "dag_pb.PBLink",
        "summa.proto.IndexAttributes",
        "summa.proto.MoreLikeThisQuery",
        "summa.proto.NerMatchConfig",
        "summa.proto.PhraseQuery",
        "summa.proto.QueryParserConfig",
        "summa.proto.ReservoirSamplingCollector",
        "summa.proto.TopDocsCollector",
        "unixfs.Data",
    ];
    #[cfg(feature = "grpc")]
    build_tonic(files, serde_default_structs)?;
    #[cfg(not(feature = "grpc"))]
    build_prost(files, serde_default_structs)?;
    Ok(())
}

#[cfg(feature = "grpc")]
fn build_tonic(files: &[&str], serde_default_structs: &[&str]) -> Result<(), Box<dyn std::error::Error>> {
    let builder = tonic_build::configure();
    let mut builder_ref = builder
        .type_attribute(".", "#[derive(serde::Serialize, serde::Deserialize)]")
        .type_attribute(".", "#[serde(rename_all = \"snake_case\")]");
    for serde_default_struct in serde_default_structs {
        builder_ref = builder_ref.type_attribute(serde_default_struct, "#[serde(default)]");
    }
    Ok(builder_ref
        .file_descriptor_set_path(std::env::var("OUT_DIR").unwrap() + "/summa.bin")
        .compile(files, &["./proto"])?)
}

#[cfg(not(feature = "grpc"))]
fn build_prost(files: &[&str], serde_default_structs: &[&str]) -> Result<(), Box<dyn std::error::Error>> {
    let mut builder = prost_build::Config::new();
    let mut builder_ref = builder
        .type_attribute(".", "#[derive(serde::Serialize, serde::Deserialize)]")
        .type_attribute(".", "#[serde(rename_all = \"snake_case\")]");
    for serde_default_struct in serde_default_structs {
        builder_ref = builder_ref.type_attribute(serde_default_struct, "#[serde(default)]");
    }
    Ok(builder_ref.compile_protos(files, &["./proto"])?)
}