Skip to content

perf(spanner): add ToValue for &[u8]#6070

Open
fornwall wants to merge 3 commits into
googleapis:mainfrom
fornwall:up-2-tovalue-for-byte-slice
Open

perf(spanner): add ToValue for &[u8]#6070
fornwall wants to merge 3 commits into
googleapis:mainfrom
fornwall:up-2-tovalue-for-byte-slice

Conversation

@fornwall

@fornwall fornwall commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

ToValue was implemented for Vec<u8> but not for byte slices, so a caller holding a &[u8] had to allocate an owned Vec<u8> purely to encode it, adding a copy per binary cell on potentially hot binding paths.

Add impl ToValue for &[u8] holding the BYTES/base64 encoding, and have the Vec<u8> impl delegate to it via self.as_slice().

@fornwall
fornwall requested review from a team as code owners July 16, 2026 12:56
@product-auto-label product-auto-label Bot added the api: spanner Issues related to the Spanner API. label Jul 16, 2026
@fornwall fornwall changed the title feat(spanner): add ToValue for &[u8] perf(spanner): add ToValue for &[u8] Jul 16, 2026
@fornwall
fornwall force-pushed the up-2-tovalue-for-byte-slice branch from f651f16 to 47d507f Compare July 16, 2026 12:56

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request implements the ToValue trait for byte slices (&[u8]) in the Spanner crate, enabling them to be encoded as base64 strings. It also adds a corresponding unit test to verify the correctness of this implementation. There are no review comments, and I have no feedback to provide.

ToValue was implemented for Vec<u8> but not for byte slices, so a caller
holding a &[u8] had to allocate an owned Vec<u8> (via .to_vec()) purely to
encode it, adding a copy per binary cell on potentially hot binding paths.

Add impl ToValue for &[u8] holding the BYTES/base64 encoding, and have the
Vec<u8> impl delegate to it via self.as_slice(). This keeps a single source
of truth for the encoding (no risk of the two drifting) while both produce
an identical Value.

Signed-off-by: Fredrik Fornwall <fredrik@fornwall.net>
@fornwall
fornwall force-pushed the up-2-tovalue-for-byte-slice branch from 47d507f to f26e3bc Compare July 16, 2026 12:59
Comment thread src/spanner/src/to_value.rs Outdated
@fornwall
fornwall requested a review from olavloite July 17, 2026 11:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

api: spanner Issues related to the Spanner API.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants