Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adds implementation of writer configuration #685

Merged
merged 11 commits into from
Jan 22, 2024
Merged

Conversation

desaikd
Copy link
Contributor

@desaikd desaikd commented Nov 30, 2023

Issue #618:

Description of changes:
Adds an implementation of a writer configuration that can be used to create a writer based on format and Ion version. This uses LazyEncoder to build the writer using different Encodings with different build_writer implementations.

List of changes:

  • Adds a writer configuration implementation that supports configuring both binary and text writer
  • Adds build_writer() with LazyEncoder which can be used to be build a writer based on given writer configuration
  • Removes write_as and write_all_as methods from element. Instead now Lazy*Writer can be used to write a Rust value as Ion.
  • Uses WriteConfig within to_binary and to_text methods of element API

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

* Adds a writer configuration implementation that supports configuring
both binary and text writer
* Adds build_writer() with LazyEncoder which can be used to be build a
writer based on given writer configuration
* Removes write_as and write_all_as methods from element. Instead now
LazyTextWriter can be used to write a Rust value as Ion.
* Uses WriteConfig within to_binary and to_text methods of element API
@desaikd desaikd requested a review from zslayton November 30, 2023 17:44
src/lazy/encoder/mod.rs Outdated Show resolved Hide resolved
src/element/mod.rs Outdated Show resolved Hide resolved
src/element/mod.rs Outdated Show resolved Hide resolved
src/element/mod.rs Outdated Show resolved Hide resolved
src/element/mod.rs Outdated Show resolved Hide resolved
src/element/writer.rs Outdated Show resolved Hide resolved
src/element/writer.rs Outdated Show resolved Hide resolved
zslayton and others added 7 commits December 8, 2023 10:17
* Modifies element APIs to use raw text/bianry writers instead of lazy
writer
* Adds implementation of `WriteAsIon` for `Element` and implementation
of `WriteAsIonValue` for `Value`
* adds build API implementation for binary and text lazy writers
* Puts `WriteConfig` under `experimental-lazy-reader` as it uses
`Encoding`
@desaikd desaikd changed the base branch from main to new-binary-writer December 14, 2023 21:54
@desaikd
Copy link
Contributor Author

desaikd commented Dec 14, 2023

Summary of new changes since last review:

  • Modifies element APIs to use raw text/bianry writers instead of lazy
    writer
  • Adds implementation of WriteAsIon for Element and implementation
    of WriteAsIonValue for Value
  • adds build API implementation for binary and text lazy writers
  • Puts WriteConfig under experimental-lazy-reader as it uses
    Encoding

Base automatically changed from new-binary-writer to main December 20, 2023 12:43
src/element/writer.rs Show resolved Hide resolved
src/lazy/encoder/annotate.rs Outdated Show resolved Hide resolved
Comment on lines 42 to 50
let annotations = self.annotations().iter().collect::<Vec<&Symbol>>();
if !annotations.is_empty() {
self.value()
.write_as_ion_value(writer.with_annotations(&annotations))
} else {
self.value()
.write_as_ion_value(writer.without_annotations())
}
}
Copy link
Contributor

Choose a reason for hiding this comment

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

We should add a pub(crate) way for this to access the Annotations' existing Vec so we don't have to collect() a new one. For now, you can optimize the no-annotations case a bit by doing:

if self.annotations().is_empty() {
    self.value().write_as_ion_value(writer.without_annotations())
} else {
    self.value.write_as_ion_value(writer.with_annotations(&Vec::from_iter(annotations.iter()))
}

@desaikd desaikd merged commit 4a9fc91 into main Jan 22, 2024
20 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants