pub struct CsvWriter { /* private fields */ }Expand description
Builds CSV text one record at a time.
Output is deterministic: a field is quoted only when it contains a delimiter
(,), a quote ("), or a line break (\r/\n); an embedded quote is
doubled; and every record is terminated with \r\n (per RFC 4180).
In-memory writing cannot fail.
use reliakit_csv::CsvWriter;
let mut writer = CsvWriter::new();
writer.write_record(["id", "note"]);
writer.write_record(["1", "has \"quotes\""]);
assert_eq!(writer.into_string(), "id,note\r\n1,\"has \"\"quotes\"\"\"\r\n");Implementations§
Source§impl CsvWriter
impl CsvWriter
Sourcepub const fn new() -> Self
pub const fn new() -> Self
Creates an empty writer.
Examples found in repository?
examples/basic.rs (line 48)
42fn main() {
43 // Low-level: parse rows of strings.
44 let rows = read_str("a,b\n1,2\n").unwrap();
45 println!("rows: {rows:?}");
46
47 // Low-level: write rows deterministically (a field is quoted only if needed).
48 let mut writer = CsvWriter::new();
49 writer.write_record(["plain", "needs,quote"]);
50 print!("written: {}", writer.into_string());
51
52 // Typed: round-trip a slice of records through a header + rows.
53 let services = vec![
54 Service {
55 name: "api".into(),
56 port: 8080,
57 enabled: true,
58 },
59 Service {
60 name: "worker, west".into(),
61 port: 9000,
62 enabled: false,
63 },
64 ];
65 let text = to_csv_string(&services);
66 print!("encoded:\n{text}");
67
68 let decoded: Vec<Service> = from_csv_str(&text).unwrap();
69 assert_eq!(decoded, services);
70 println!("round-trip ok: {} record(s)", decoded.len());
71}Sourcepub fn write_record<I, S>(&mut self, fields: I)
pub fn write_record<I, S>(&mut self, fields: I)
Writes one record from an iterator of field values, terminated by \r\n.
Examples found in repository?
examples/basic.rs (line 49)
42fn main() {
43 // Low-level: parse rows of strings.
44 let rows = read_str("a,b\n1,2\n").unwrap();
45 println!("rows: {rows:?}");
46
47 // Low-level: write rows deterministically (a field is quoted only if needed).
48 let mut writer = CsvWriter::new();
49 writer.write_record(["plain", "needs,quote"]);
50 print!("written: {}", writer.into_string());
51
52 // Typed: round-trip a slice of records through a header + rows.
53 let services = vec![
54 Service {
55 name: "api".into(),
56 port: 8080,
57 enabled: true,
58 },
59 Service {
60 name: "worker, west".into(),
61 port: 9000,
62 enabled: false,
63 },
64 ];
65 let text = to_csv_string(&services);
66 print!("encoded:\n{text}");
67
68 let decoded: Vec<Service> = from_csv_str(&text).unwrap();
69 assert_eq!(decoded, services);
70 println!("round-trip ok: {} record(s)", decoded.len());
71}Sourcepub fn into_string(self) -> String
pub fn into_string(self) -> String
Consumes the writer and returns the CSV text.
Examples found in repository?
examples/basic.rs (line 50)
42fn main() {
43 // Low-level: parse rows of strings.
44 let rows = read_str("a,b\n1,2\n").unwrap();
45 println!("rows: {rows:?}");
46
47 // Low-level: write rows deterministically (a field is quoted only if needed).
48 let mut writer = CsvWriter::new();
49 writer.write_record(["plain", "needs,quote"]);
50 print!("written: {}", writer.into_string());
51
52 // Typed: round-trip a slice of records through a header + rows.
53 let services = vec![
54 Service {
55 name: "api".into(),
56 port: 8080,
57 enabled: true,
58 },
59 Service {
60 name: "worker, west".into(),
61 port: 9000,
62 enabled: false,
63 },
64 ];
65 let text = to_csv_string(&services);
66 print!("encoded:\n{text}");
67
68 let decoded: Vec<Service> = from_csv_str(&text).unwrap();
69 assert_eq!(decoded, services);
70 println!("round-trip ok: {} record(s)", decoded.len());
71}Trait Implementations§
Auto Trait Implementations§
impl Freeze for CsvWriter
impl RefUnwindSafe for CsvWriter
impl Send for CsvWriter
impl Sync for CsvWriter
impl Unpin for CsvWriter
impl UnsafeUnpin for CsvWriter
impl UnwindSafe for CsvWriter
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more