Skip to content

Conversation

@mustiikhalil
Copy link
Collaborator

The following PR brings the basic port of flexbuffers, that allows the user to read and write flexbuffer objects and covert them into JSON if needed.

The current implementation supports the following

  • Writing most objects into the buffer, Maps, vectors, strings, blob, and primitive types
  • Reading most objects into the buffer, Maps, vectors, strings, blob, and primitive types
  • Currently, if an offset/object cant be read we default to a swift
    nil instead of the default Flexbuffers 'null' with all values.

What's missing:

  • Verifier which will follow in a different PR

@github-actions github-actions bot added the swift label Apr 11, 2025
@github-actions github-actions bot added the grpc label Apr 11, 2025
@mustiikhalil mustiikhalil self-assigned this Apr 11, 2025
@mustiikhalil mustiikhalil force-pushed the flexbuffers branch 2 times, most recently from d5cf1d2 to 5b2ff18 Compare April 13, 2025 22:55
@aardappel aardappel self-requested a review June 14, 2025 18:42
aardappel
aardappel previously approved these changes Jun 14, 2025
Copy link
Collaborator

@aardappel aardappel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Though I don't know Swift and haven't reviewed this in detail, it appears to follow the C++ implementation closely, has tests and otherwise looks good.. I'm fine for this to go in once @mustiikhalil is happy with it.

@mustiikhalil
Copy link
Collaborator Author

@aardappel I tried to keep it as close to cpp as possible! I'm quite happy with the implementation and also the performance of the library. Benchmarks can be found here and they compare flexbuffers to the native swift JSON decoder and encoder.

Only difference the swift lib has, is that it's more strongly typed, so for example if the user calls reference.int. We will only return a value if the type was an int. Unlike, cpp where we try to read the memory and cast it to an int either ways.

This is the offical port for FlexBuffers within
swift, and it introcudes a Common Module where code
is shared between flatbuffers and flexbuffers.

Writing most supported values like maps, vectors,
nil and scalars into a flexbuffer buffer. And includes
tests to verify that its similar to cpp
Implementing reading from a flexbuffer, enabling
most of the buffers features, like most types, maps, vectors,
typedvectors, and fixedtypedvectors.

Currently, if an offset/object cant be read we default to a swift
nil instead of the default flexbuffers 'null' with all values.
Address warnings within the library
@mustiikhalil mustiikhalil merged commit 5a95b7b into google:master Jun 22, 2025
94 of 95 checks passed
@mustiikhalil mustiikhalil deleted the flexbuffers branch June 22, 2025 06:36
dongjoon-hyun added a commit to apache/spark-connect-swift that referenced this pull request Oct 28, 2025
### What changes were proposed in this pull request?

This PR aims to upgrade `FlatBuffers` to `v25.9.23`

### Why are the changes needed?

To bring the latest bug fixes and improvements like `Windows` support.
- https://github.com/google/flatbuffers/releases/tag/v25.9.23 (2025-09-23)
  - google/flatbuffers#8484
  - google/flatbuffers#8577
  - google/flatbuffers#8622
  - google/flatbuffers#8637
  - google/flatbuffers#8643
  - google/flatbuffers#8650
  - google/flatbuffers#8649
  - google/flatbuffers#8702

### Does this PR introduce _any_ user-facing change?

No. There is no behavior change.

### How was this patch tested?

Pass the CIs.

### Was this patch authored or co-authored using generative AI tooling?

No.

Closes #254 from dongjoon-hyun/SPARK-54045.

Authored-by: Dongjoon Hyun <[email protected]>
Signed-off-by: Dongjoon Hyun <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants