Skip to content

Commit

Permalink
Rust reflection: simplify dependencies, fix Android build compatibili…
Browse files Browse the repository at this point in the history
…ty (#8512)

* flatbuffers Rust reflection: replace num with num-traits

num crate is a wrapper over num-traits and a few other crates, that
reexports the APIs from all of them. We only need num-traits.

Signed-off-by: Marcin Radomski <[email protected]>

* Rust reflection: drop dependency on stdint crate

We only use it to get intmax_t for deriving alignment, which is an alias
for `core::ffi::c_long` [1]. We can use that directly instead.

[1] https://docs.rs/stdint/1.0.0/stdint/type.intmax_t.html

Signed-off-by: Marcin Radomski <[email protected]>

* Rust reflection: drop dependency on escape_string crate

It's used to format a string used for debugging only, so we might as
well use the builtin Debug representation of a string.

Signed-off-by: Marcin Radomski <[email protected]>

* Rust codegen: add derives on generated bitflags

Otherwise it limits the use of structs generated for reflection.fbs
in Rust reflection API.

Signed-off-by: Marcin Radomski <[email protected]>

* Rust flatbuffers: update bitflags dependency to 2.8

Signed-off-by: Marcin Radomski <[email protected]>

* Rust codegen: use bitflags v2 API for converting from bits

from_bits_unchecked was replaced with safe from_bits_retain.

Signed-off-by: Marcin Radomski <[email protected]>

* Regenerate Rust code after idl change

Signed-off-by: Marcin Radomski <[email protected]>

* Regenerate reflection_generated.rs

With flatc --rust ../../../reflection/reflection.fbs

Signed-off-by: Marcin Radomski <[email protected]>

* ts/BUILD.bazel: add missing import

Found by Buildifire presubmit:

  Function "sh_binary" is not global anymore and needs to be loaded from
  "@rules_shell//shell:sh_binary.bzl".

Signed-off-by: Marcin Radomski <[email protected]>

* Update expected value in generated_code_debug_prints_correctly test

In bitflags v2, the debug string representation of enum values is
different than it was in v1:
  Blue -> Color(Blue)
  (empty) -> LongEnum(0x0)

This change adjusts the expected test value.

Signed-off-by: Marcin Radomski <[email protected]>

* Fix tests build on Swift 5.8

grpc-swift 1.4.1 depends on swift-nio-ssl 2.14.0+ [1]. swift-nio-ssl 2.29.1
published on 2025-01-30, introduced some code [2] that uses a "switch
expression syntax" supported since Swift 5.9 [3]. Attempts to compile it with
Swift 5.8 cause build errors.

swift-nio-ssl project doesn't seem to support Swift 5.8. A commit from
2024-10-29 removes a "deprecated reference to a Swift 5.8 pipeline" [4].

swift-nio-ssl 2.29.0 is the last version that can be compiled with Swift
5.8. This commit pins it to that exact version.

[1] https://github.com/grpc/grpc-swift/blob/66e27d7e84a2f51df6b8d5c4c3649639cfe478c1/Package.swift#L33
[2] apple/swift-nio-ssl@3cb4d5a#diff-bc1db1321ff689c2819245dcce1a3080554f0fc13f81b8d326c97e7d42717c8fR54
[3] https://github.com/swiftlang/swift-evolution/blob/main/proposals/0380-if-switch-expressions.md
[4] apple/swift-nio-ssl@8a6b89d

---------

Signed-off-by: Marcin Radomski <[email protected]>
Co-authored-by: Marcin Radomski <[email protected]>
  • Loading branch information
dextero and Marcin Radomski authored Feb 4, 2025
1 parent 0312061 commit a285e7e
Show file tree
Hide file tree
Showing 14 changed files with 2,343 additions and 3,095 deletions.
4 changes: 4 additions & 0 deletions MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@ bazel_dep(
name = "rules_nodejs",
version = "6.3.3",
)
bazel_dep(
name = "rules_shell",
version = "0.3.0",
)
bazel_dep(
name = "rules_swift",
version = "1.18.0",
Expand Down
2 changes: 1 addition & 1 deletion rust/flatbuffers/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ std = []
serialize = ["serde"]

[dependencies]
bitflags = "1.2.1"
bitflags = "2.8.0"
serde = { version = "1.0", optional = true }

[build-dependencies]
Expand Down
4 changes: 1 addition & 3 deletions rust/reflection/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ edition = "2021"

[dependencies]
flatbuffers = { path = "../flatbuffers"}
escape_string = "0.1.2"
stdint = "0.2.0"
num = "0.4.1"
num-traits = "0.2.19"
anyhow = "1.0.75"
thiserror = "1.0"
15 changes: 8 additions & 7 deletions rust/reflection/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,9 @@ use flatbuffers::{
use reflection_generated::reflection::{BaseType, Field, Object, Schema};

use core::mem::size_of;
use escape_string::escape;
use num::traits::float::Float;
use num::traits::int::PrimInt;
use num::traits::FromPrimitive;
use stdint::uintmax_t;
use num_traits::float::Float;
use num_traits::int::PrimInt;
use num_traits::FromPrimitive;
use thiserror::Error;

#[derive(Error, Debug, PartialEq)]
Expand Down Expand Up @@ -541,7 +539,9 @@ pub unsafe fn set_string(

if delta != 0 {
// Rounds the delta up to the nearest multiple of the maximum int size to keep the types after the insersion point aligned.
let mask = (size_of::<uintmax_t>() - 1) as isize;
// stdint crate defines intmax_t as an alias for c_long; use it directly to avoid extra
// dependency.
let mask = (size_of::<core::ffi::c_long>() - 1) as isize;
let offset = (delta + mask) & !mask;
let mut visited_vec = vec![false; buf.len()];

Expand Down Expand Up @@ -715,7 +715,8 @@ unsafe fn get_any_value_string(
}
let mut field_value = get_any_field_string(&table, &field, schema);
if field.type_().base_type() == BaseType::String {
field_value = escape(field_value.as_str()).to_string();
// Escape the string
field_value = format!("{:?}", field_value.as_str());
}
s += field.name();
s += ": ";
Expand Down
Loading

0 comments on commit a285e7e

Please sign in to comment.