fn generate_methods()

in dubbo-build/src/client.rs [100:161]


fn generate_methods<T: Service>(
    service: &T,
    emit_package: bool,
    proto_path: &str,
    compile_well_known_types: bool,
) -> TokenStream {
    let mut stream = TokenStream::new();
    let package = if emit_package { service.package() } else { "" };

    for method in service.methods() {
        let service_unique_name = format!(
            "{}{}{}",
            package,
            if package.is_empty() { "" } else { "." },
            service.identifier()
        );
        let path = format!(
            "/{}{}{}/{}",
            package,
            if package.is_empty() { "" } else { "." },
            service.identifier(),
            method.identifier()
        );

        stream.extend(generate_doc_comments(method.comment()));

        let method = match (method.client_streaming(), method.server_streaming()) {
            (false, false) => generate_unary(
                service_unique_name,
                &method,
                proto_path,
                compile_well_known_types,
                path,
            ),
            (false, true) => generate_server_streaming(
                service_unique_name,
                &method,
                proto_path,
                compile_well_known_types,
                path,
            ),
            (true, false) => generate_client_streaming(
                service_unique_name,
                &method,
                proto_path,
                compile_well_known_types,
                path,
            ),
            (true, true) => generate_streaming(
                service_unique_name,
                &method,
                proto_path,
                compile_well_known_types,
                path,
            ),
        };

        stream.extend(method);
    }

    stream
}