fn struct_schema_and_value()

in kafka-connect-bigtable-sink/doc/performance/terraform/main.rs [39:89]


fn struct_schema_and_value(
    column_families: u64,
    columns_per_family: u64,
    field_value: String,
) -> (String, String) {
    let columns: Vec<String> = (1..=columns_per_family)
        .map(|i| format!("c{}", i))
        .collect();
    let column_families: Vec<String> = (1..=column_families).map(|i| format!("cf{}", i)).collect();
    let column_family_schemas: Vec<String> = column_families
        .iter()
        .map(|cf| {
            format!(
                "{{\"type\":\"struct\",\"optional\":true,\"field\":\"{}\",\"fields\":[{}]}}",
                cf,
                columns
                    .iter()
                    .map(|c| format!(
                        "{{\"type\":\"string\",\"optional\":true,\"field\":\"{}\"}}",
                        c
                    ))
                    .collect::<Vec<String>>()
                    .join(",")
            )
        })
        .collect();
    let schema: String = format!(
        "{{\"name\":\"record\",\"type\":\"struct\",\"optional\":true,\"fields\":[{}]}}",
        column_family_schemas.join(",")
    );
    let value: String = format!(
        "{{{}}}",
        column_families
            .iter()
            .map(|cf| {
                format!(
                    "\"{}\":{{{}}}",
                    cf,
                    columns
                        .iter()
                        .map(|c| format!("\"{}\":\"{}\"", c, field_value))
                        .collect::<Vec<String>>()
                        .join(",")
                )
            })
            .collect::<Vec<String>>()
            .join(",")
    );

    (schema, value)
}