From c82bfa5a72f1a285899c38a514db53f928d74d39 Mon Sep 17 00:00:00 2001
From: Orne Brocaar <info@brocaar.com>
Date: Mon, 16 Oct 2023 10:51:29 +0100
Subject: [PATCH] api: Ignore unknown fields (Rust JSON decode).

The JSON encoding should only be used for debugging purposes! However
this change avoids showing errors in case there are unknown fields in the
JSON payload. This would happen when for example the MQTT Forwarder
and ChirpStack uses a different API version (which in case of Protobuf
would be fine, as long as the major version remains the same).
---
 api/rust/build.rs | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/api/rust/build.rs b/api/rust/build.rs
index a9cce990..13b1eadc 100644
--- a/api/rust/build.rs
+++ b/api/rust/build.rs
@@ -41,6 +41,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
         let descriptor_set = std::fs::read(out_dir.join("common").join("proto_descriptor.bin"))?;
         pbjson_build::Builder::new()
             .register_descriptors(&descriptor_set)?
+            .ignore_unknown_fields()
             .out_dir(out_dir.join("common"))
             .build(&[".common"])?;
     }
@@ -65,6 +66,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
         let descriptor_set = std::fs::read(out_dir.join("gw").join("proto_descriptor.bin"))?;
         pbjson_build::Builder::new()
             .register_descriptors(&descriptor_set)?
+            .ignore_unknown_fields()
             .out_dir(out_dir.join("gw"))
             .extern_path(".common", "crate::common")
             .build(&[".gw"])?;
@@ -94,6 +96,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
         let descriptor_set = std::fs::read(out_dir.join("internal").join("proto_descriptor.bin"))?;
         pbjson_build::Builder::new()
             .register_descriptors(&descriptor_set)?
+            .ignore_unknown_fields()
             .out_dir(out_dir.join("internal"))
             .extern_path(".common", "crate::common")
             .build(&[".internal"])?;
@@ -126,6 +129,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
         pbjson_build::Builder::new()
             .emit_fields()
             .register_descriptors(&descriptor_set)?
+            .ignore_unknown_fields()
             .out_dir(out_dir.join("integration"))
             .extern_path(".common", "crate::common")
             .extern_path(".gw", "crate::gw")
@@ -149,6 +153,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
         let descriptor_set = std::fs::read(out_dir.join("meta").join("proto_descriptor.bin"))?;
         pbjson_build::Builder::new()
             .register_descriptors(&descriptor_set)?
+            .ignore_unknown_fields()
             .out_dir(out_dir.join("meta"))
             .extern_path(".common", "crate::common")
             .extern_path(".gw", "crate::gw")