| 835 | reader.build() |
| 836 | } |
| 837 | fn to_writer(&self) -> csv_core::Writer { |
| 838 | let mut builder = csv_core::WriterBuilder::new(); |
| 839 | let mut writer = match &self.dialect { |
| 840 | DialectItem::Str(name) => { |
| 841 | let g = GLOBAL_HASHMAP.lock(); |
| 842 | if let Some(dialect) = g.get(name) { |
| 843 | let mut builder = builder |
| 844 | .delimiter(dialect.delimiter) |
| 845 | .double_quote(dialect.doublequote) |
| 846 | .terminator(dialect.lineterminator); |
| 847 | if let Some(t) = dialect.quotechar { |
| 848 | builder = builder.quote(t); |
| 849 | } |
| 850 | builder |
| 851 | |
| 852 | // RustPython todo |
| 853 | // todo! Perfecting the remaining attributes. |
| 854 | } else { |
| 855 | &mut builder |
| 856 | } |
| 857 | } |
| 858 | DialectItem::Obj(obj) => { |
| 859 | let mut builder = builder |
| 860 | .delimiter(obj.delimiter) |
| 861 | .double_quote(obj.doublequote) |
| 862 | .terminator(obj.lineterminator); |
| 863 | if let Some(t) = obj.quotechar { |
| 864 | builder = builder.quote(t); |
| 865 | } |
| 866 | builder |
| 867 | } |
| 868 | _ => &mut builder, |
| 869 | }; |
| 870 | if let Some(t) = self.delimiter { |
| 871 | writer = writer.delimiter(t); |
| 872 | } |
| 873 | if let Some(t) = self.quotechar { |
| 874 | if let Some(u) = t { |
| 875 | writer = writer.quote(u); |
| 876 | } else { |
| 877 | todo!() |
| 878 | } |
| 879 | } |
| 880 | if let Some(t) = self.doublequote { |
| 881 | writer = writer.double_quote(t); |
| 882 | } |
| 883 | writer = match self.lineterminator { |
| 884 | Some(u) => writer.terminator(u), |
| 885 | None => writer.terminator(Terminator::CRLF), |
| 886 | }; |
| 887 | if let Some(e) = self.escapechar { |
| 888 | writer = writer.escape(e); |
| 889 | } |
| 890 | if let Some(e) = self.quoting { |
| 891 | writer = writer.quote_style(e.into()); |
| 892 | } |
| 893 | writer.build() |
| 894 | } |