Neuron®
The Neuron® is the basis for the creation of open and secure federated networks for smart societies.
Loading...
Searching...
No Matches
CsvCodec.cs
1using System;
2using System.Collections.Generic;
3using System.Text;
4using System.Threading.Tasks;
7
9{
14 {
18 public CsvCodec()
19 {
20 }
21
25 public const string ContentType = "text/csv";
26
30 public static readonly string[] CsvContentTypes = new string[] { ContentType };
31
35 public static readonly string[] CsvFileExtensions = new string[] { "csv" };
36
40 public string[] ContentTypes => CsvContentTypes;
41
46
53 public bool Decodes(string ContentType, out Grade Grade)
54 {
56 {
57 Grade = Grade.Excellent;
58 return true;
59 }
60 else
61 {
62 Grade = Grade.NotAtAll;
63 return false;
64 }
65 }
66
77 public Task<object> DecodeAsync(string ContentType, byte[] Data, Encoding Encoding, KeyValuePair<string, string>[] Fields, Uri BaseUri)
78 {
79 string s = CommonTypes.GetString(Data, Encoding);
80 return Task.FromResult<object>(CSV.Parse(s));
81 }
82
83
90 public bool TryGetContentType(string FileExtension, out string ContentType)
91 {
92 if (string.Compare(FileExtension, "csv", true) == 0)
93 {
95 return true;
96 }
97 else
98 {
99 ContentType = null;
100 return false;
101 }
102 }
103
110 public bool TryGetFileExtension(string ContentType, out string FileExtension)
111 {
112 switch (ContentType.ToLower())
113 {
115 FileExtension = "csv";
116 return true;
117
118 default:
119 FileExtension = string.Empty;
120 return false;
121 }
122 }
123
131 public bool Encodes(object Object, out Grade Grade, params string[] AcceptedContentTypes)
132 {
133 if (InternetContent.IsAccepted(CsvContentTypes, AcceptedContentTypes) &&
134 (Object is string[][] || Object is IMatrix))
135 {
136 Grade = Grade.Ok;
137 return true;
138 }
139 else
140 {
141 Grade = Grade.NotAtAll;
142 return false;
143 }
144 }
145
154 public Task<KeyValuePair<byte[], string>> EncodeAsync(object Object, Encoding Encoding, params string[] AcceptedContentTypes)
155 {
156 string Csv;
157
158 if (Object is string[][] Records)
159 Csv = CSV.Encode(Records);
160 else if (Object is IMatrix M)
161 Csv = CSV.Encode(M);
162 else
163 throw new ArgumentException("Unable to encode as CSV.", nameof(Object));
164
165 if (Encoding is null)
166 Encoding = Encoding.UTF8;
167
168 return Task.FromResult(new KeyValuePair<byte[], string>(Encoding.GetBytes(Csv), ContentType));
169 }
170 }
171}
Helps with common CSV-related tasks. (CSV=Comma Separated Values)
Definition: CSV.cs:21
static string[][] Parse(string Csv)
Parses a CSV string.
Definition: CSV.cs:29
static string Encode(string[][] Records)
Encodes records as a Comma-separated values string.
Definition: CSV.cs:209
Helps with parsing of commong data types.
Definition: CommonTypes.cs:13
static string GetString(byte[] Data, Encoding DefaultEncoding)
Gets a string from its binary representation, taking any Byte Order Mark (BOM) into account.
Static class managing encoding and decoding of internet content.
static bool IsAccepted(string ContentType, params string[] AcceptedContentTypes)
Checks if a given content type is acceptable.
Task< KeyValuePair< byte[], string > > EncodeAsync(object Object, Encoding Encoding, params string[] AcceptedContentTypes)
Encodes an object.
Definition: CsvCodec.cs:154
bool Encodes(object Object, out Grade Grade, params string[] AcceptedContentTypes)
If the encoder encodes a given object.
Definition: CsvCodec.cs:131
bool TryGetContentType(string FileExtension, out string ContentType)
Tries to get the content type of an item, given its file extension.
Definition: CsvCodec.cs:90
bool Decodes(string ContentType, out Grade Grade)
If the decoder decodes an object with a given content type.
Definition: CsvCodec.cs:53
Task< object > DecodeAsync(string ContentType, byte[] Data, Encoding Encoding, KeyValuePair< string, string >[] Fields, Uri BaseUri)
Decodes an object.
Definition: CsvCodec.cs:77
string[] FileExtensions
Supported file extensions.
Definition: CsvCodec.cs:45
string[] ContentTypes
Supported content types.
Definition: CsvCodec.cs:40
static readonly string[] CsvContentTypes
CSV content types.
Definition: CsvCodec.cs:30
bool TryGetFileExtension(string ContentType, out string FileExtension)
Tries to get the file extension of an item, given its Content-Type.
Definition: CsvCodec.cs:110
static readonly string[] CsvFileExtensions
CSV content types.
Definition: CsvCodec.cs:35
const string ContentType
Content-Type for CSV files.
Definition: CsvCodec.cs:25
Basic interface for Internet Content decoders. A class implementing this interface and having a defau...
Basic interface for Internet Content encoders. A class implementing this interface and having a defau...
Basic interface for matrices.
Definition: IMatrix.cs:9
Grade
Grade enumeration
Definition: Grade.cs:7