Skip to content

Commit dbceffa

Browse files
committed
[Variant] Consolidate examples for json writing
1 parent d7fc416 commit dbceffa

File tree

2 files changed

+27
-89
lines changed

2 files changed

+27
-89
lines changed

parquet-variant/examples/variant_to_json_examples.rs

Lines changed: 0 additions & 55 deletions
This file was deleted.

parquet-variant/src/to_json.rs

Lines changed: 27 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
// under the License.
1717

1818
//! Module for converting Variant data to JSON format
19-
2019
use arrow_schema::ArrowError;
2120
use base64::{engine::general_purpose, Engine as _};
2221
use serde_json::Value;
@@ -86,14 +85,17 @@ fn write_decimal_i64(
8685
Ok(())
8786
}
8887

89-
/// Converts a Variant to JSON and writes it to the provided `Write`
88+
/// Converts a Variant to JSON and writes it to the provided [`Write`]
9089
///
9190
/// This function writes JSON directly to any type that implements [`Write`],
9291
/// making it efficient for streaming or when you want to control the output destination.
9392
///
93+
/// See [`variant_to_json_string`] for a convenience function that returns a
94+
/// JSON string.
95+
///
9496
/// # Arguments
9597
///
96-
/// * `json_buffer` - Writer to output JSON to
98+
/// * `writer` - Writer to output JSON to
9799
/// * `variant` - The Variant value to convert
98100
///
99101
/// # Returns
@@ -103,23 +105,34 @@ fn write_decimal_i64(
103105
///
104106
/// # Examples
105107
///
108+
///
106109
/// ```rust
107110
/// # use parquet_variant::{Variant, variant_to_json};
108111
/// # use arrow_schema::ArrowError;
109-
/// let variant = Variant::Int32(42);
112+
/// let variant = Variant::String("Hello, World!");
110113
/// let mut buffer = Vec::new();
111114
/// variant_to_json(&mut buffer, &variant)?;
112-
/// assert_eq!(String::from_utf8(buffer).unwrap(), "42");
115+
/// assert_eq!(String::from_utf8(buffer).unwrap(), "\"Hello, World!\"");
113116
/// # Ok::<(), ArrowError>(())
114117
/// ```
115118
///
119+
/// # Example: Create a [`Variant::Object`] and convert to JSON
116120
/// ```rust
117-
/// # use parquet_variant::{Variant, variant_to_json};
121+
/// # use parquet_variant::{Variant, VariantBuilder, variant_to_json};
118122
/// # use arrow_schema::ArrowError;
119-
/// let variant = Variant::String("Hello, World!");
120-
/// let mut buffer = Vec::new();
121-
/// variant_to_json(&mut buffer, &variant)?;
122-
/// assert_eq!(String::from_utf8(buffer).unwrap(), "\"Hello, World!\"");
123+
/// let mut builder = VariantBuilder::new();
124+
/// // Create an object builder that will write fields to the object
125+
/// let mut object_builder = builder.new_object();
126+
/// object_builder.insert("first_name", "Jiaying");
127+
/// object_builder.insert("last_name", "Li");
128+
/// object_builder.finish();
129+
/// // Finish the builder to get the metadata and value
130+
/// let (metadata, value) = builder.finish();
131+
/// // Create the Variant and convert to JSON
132+
/// let variant = Variant::try_new(&metadata, &value)?;
133+
/// let mut writer = Vec::new();
134+
/// variant_to_json(&mut writer, &variant,)?;
135+
/// assert_eq!(br#"{"first_name":"Jiaying","last_name":"Li"}"#, writer.as_slice());
123136
/// # Ok::<(), ArrowError>(())
124137
/// ```
125138
pub fn variant_to_json(json_buffer: &mut impl Write, variant: &Variant) -> Result<(), ArrowError> {
@@ -243,10 +256,10 @@ fn convert_array_to_json(buffer: &mut impl Write, arr: &VariantList) -> Result<(
243256
Ok(())
244257
}
245258

246-
/// Convert Variant to JSON string
259+
/// Convert [`Variant`] to JSON [`String`]
247260
///
248261
/// This is a convenience function that converts a Variant to a JSON string.
249-
/// This is the same as calling variant_to_json with a Vec
262+
/// This is the same as calling [`variant_to_json`] with a [`Vec`].
250263
/// It's the simplest way to get a JSON representation when you just need a String result.
251264
///
252265
/// # Arguments
@@ -269,15 +282,6 @@ fn convert_array_to_json(buffer: &mut impl Write, arr: &VariantList) -> Result<(
269282
/// # Ok::<(), ArrowError>(())
270283
/// ```
271284
///
272-
/// ```rust
273-
/// # use parquet_variant::{Variant, variant_to_json_string};
274-
/// # use arrow_schema::ArrowError;
275-
/// let variant = Variant::String("Hello, World!");
276-
/// let json = variant_to_json_string(&variant)?;
277-
/// assert_eq!(json, "\"Hello, World!\"");
278-
/// # Ok::<(), ArrowError>(())
279-
/// ```
280-
///
281285
/// # Example: Create a [`Variant::Object`] and convert to JSON
282286
///
283287
/// This example shows how to create an object with two fields and convert it to JSON:
@@ -302,8 +306,7 @@ fn convert_array_to_json(buffer: &mut impl Write, arr: &VariantList) -> Result<(
302306
/// // Create the Variant and convert to JSON
303307
/// let variant = Variant::try_new(&metadata, &value)?;
304308
/// let json = variant_to_json_string(&variant)?;
305-
/// assert!(json.contains("\"first_name\":\"Jiaying\""));
306-
/// assert!(json.contains("\"last_name\":\"Li\""));
309+
/// assert_eq!(r#"{"first_name":"Jiaying","last_name":"Li"}"#, json);
307310
/// # Ok::<(), ArrowError>(())
308311
/// ```
309312
pub fn variant_to_json_string(variant: &Variant) -> Result<String, ArrowError> {
@@ -313,7 +316,7 @@ pub fn variant_to_json_string(variant: &Variant) -> Result<String, ArrowError> {
313316
.map_err(|e| ArrowError::InvalidArgumentError(format!("UTF-8 conversion error: {}", e)))
314317
}
315318

316-
/// Convert Variant to serde_json::Value
319+
/// Convert [`Variant`] to [`serde_json::Value`]
317320
///
318321
/// This function converts a Variant to a [`serde_json::Value`], which is useful
319322
/// when you need to work with the JSON data programmatically or integrate with
@@ -334,16 +337,6 @@ pub fn variant_to_json_string(variant: &Variant) -> Result<String, ArrowError> {
334337
/// # use parquet_variant::{Variant, variant_to_json_value};
335338
/// # use serde_json::Value;
336339
/// # use arrow_schema::ArrowError;
337-
/// let variant = Variant::Int32(42);
338-
/// let json_value = variant_to_json_value(&variant)?;
339-
/// assert_eq!(json_value, Value::Number(42.into()));
340-
/// # Ok::<(), ArrowError>(())
341-
/// ```
342-
///
343-
/// ```rust
344-
/// # use parquet_variant::{Variant, variant_to_json_value};
345-
/// # use serde_json::Value;
346-
/// # use arrow_schema::ArrowError;
347340
/// let variant = Variant::String("hello");
348341
/// let json_value = variant_to_json_value(&variant)?;
349342
/// assert_eq!(json_value, Value::String("hello".to_string()));

0 commit comments

Comments
 (0)