From 29a3f8461b7e9f90c2867e1b24dfbd3121e4f036 Mon Sep 17 00:00:00 2001 From: Matt Bilker Date: Mon, 9 Sep 2019 20:21:44 +0000 Subject: [PATCH] options: add builder option --- src/lib.rs | 2 +- src/options.rs | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 9ae25db..8e78c02 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -33,7 +33,7 @@ pub use crate::reader::Reader; pub use crate::error::{KbinError, KbinErrorKind, Result}; pub use crate::node::{Node, NodeCollection}; pub use crate::node_types::StandardType; -pub use crate::options::Options; +pub use crate::options::{Options, OptionsBuilder}; pub use crate::to_text_xml::ToTextXml; pub use crate::value::{Value, ValueArray}; pub use crate::writer::{Writer, Writeable}; diff --git a/src/options.rs b/src/options.rs index d656acd..40e3d83 100644 --- a/src/options.rs +++ b/src/options.rs @@ -7,6 +7,12 @@ pub struct Options { pub(crate) encoding: EncodingType, } +#[derive(Default)] +pub struct OptionsBuilder { + compression: Compression, + encoding: EncodingType, +} + impl Options { pub fn new( compression: Compression, @@ -18,6 +24,10 @@ impl Options { } } + pub fn builder() -> OptionsBuilder { + OptionsBuilder::default() + } + pub fn with_encoding(encoding: EncodingType) -> Self { Self { encoding, @@ -25,3 +35,22 @@ impl Options { } } } + +impl OptionsBuilder { + pub fn compression(&mut self, compression: Compression) -> &mut Self { + self.compression = compression; + self + } + + pub fn encoding(&mut self, encoding: EncodingType) -> &mut Self { + self.encoding = encoding; + self + } + + pub fn build(self) -> Options { + Options { + compression: self.compression, + encoding: self.encoding, + } + } +}