// common/build.rs fn main() -> Result<(), Box> { tonic_build::configure() .build_server(true) .file_descriptor_set_path("src/proto/descriptor.bin") .out_dir("src/proto") // Derive serde for all relevant messages .type_attribute( ".komp_ac.table_validation.FieldValidation", "#[derive(serde::Serialize, serde::Deserialize)]", ) .type_attribute( ".komp_ac.table_validation.CharacterLimits", "#[derive(serde::Serialize, serde::Deserialize)]", ) .type_attribute( ".komp_ac.table_validation.TableValidationResponse", "#[derive(serde::Serialize, serde::Deserialize)]", ) .type_attribute( ".komp_ac.table_validation.UpdateFieldValidationRequest", "#[derive(serde::Serialize, serde::Deserialize)]", ) .type_attribute( ".komp_ac.table_validation.UpdateFieldValidationResponse", "#[derive(serde::Serialize, serde::Deserialize)]", ) // Derive serde for the enum and keep legacy string values in JSON .type_attribute( ".komp_ac.table_validation.CountMode", "#[derive(serde::Serialize, serde::Deserialize)]", ) .type_attribute( ".komp_ac.table_validation.CountMode", r#"#[serde(rename_all = "SCREAMING_SNAKE_CASE")]"#, ) // Back-compat: allow old "character_limits" key to deserialize into "limits" .field_attribute( ".komp_ac.table_validation.FieldValidation.limits", r#"#[serde(alias = "character_limits")]"#, ) // Compile all protos (same list you already have) .compile_protos( &[ "proto/common.proto", "proto/adresar.proto", "proto/auth.proto", "proto/search.proto", "proto/search2.proto", "proto/table_definition.proto", "proto/table_script.proto", "proto/table_structure.proto", "proto/table_validation.proto", "proto/tables_data.proto", "proto/uctovnictvo.proto", ], &["proto"], )?; Ok(()) }