Neuron®
The Neuron® is the basis for the creation of open and secure federated networks for smart societies.
Loading...
Searching...
No Matches
TsvCodec.cs
1using System;
2using System.Collections.Generic;
3using System.Text;
4using System.Threading.Tasks;
7
8namespace Waher.Content.Text
9{
14 {
18 public TsvCodec()
19 {
20 }
21
25 public static readonly string[] TsvContentTypes = new string[] { "text/tab-separated-values" };
26
30 public static readonly string[] TsvFileExtensions = new string[] { "tsv" };
31
35 public string[] ContentTypes => TsvContentTypes;
36
41
48 public bool Decodes(string ContentType, out Grade Grade)
49 {
50 if (ContentType == "text/tab-separated-values")
51 {
52 Grade = Grade.Excellent;
53 return true;
54 }
55 else
56 {
57 Grade = Grade.NotAtAll;
58 return false;
59 }
60 }
61
72 public Task<object> DecodeAsync(string ContentType, byte[] Data, Encoding Encoding, KeyValuePair<string, string>[] Fields, Uri BaseUri)
73 {
74 string s = CommonTypes.GetString(Data, Encoding);
75 return Task.FromResult<object>(TSV.Parse(s));
76 }
77
78
85 public bool TryGetContentType(string FileExtension, out string ContentType)
86 {
87 if (string.Compare(FileExtension, "tsv", true) == 0)
88 {
89 ContentType = "text/tab-separated-values";
90 return true;
91 }
92 else
93 {
94 ContentType = null;
95 return false;
96 }
97 }
98
105 public bool TryGetFileExtension(string ContentType, out string FileExtension)
106 {
107 switch (ContentType.ToLower())
108 {
109 case "text/tab-separated-values":
110 FileExtension = "tsv";
111 return true;
112
113 default:
114 FileExtension = string.Empty;
115 return false;
116 }
117 }
118
126 public bool Encodes(object Object, out Grade Grade, params string[] AcceptedContentTypes)
127 {
128 if (InternetContent.IsAccepted(TsvContentTypes, AcceptedContentTypes) &&
129 (Object is string[][] || Object is IMatrix))
130 {
131 Grade = Grade.Ok;
132 return true;
133 }
134 else
135 {
136 Grade = Grade.NotAtAll;
137 return false;
138 }
139 }
140
149 public Task<KeyValuePair<byte[], string>> EncodeAsync(object Object, Encoding Encoding, params string[] AcceptedContentTypes)
150 {
151 string Tsv;
152
153 if (Object is string[][] Records)
154 Tsv = TSV.Encode(Records);
155 else if (Object is IMatrix M)
156 Tsv = TSV.Encode(M);
157 else
158 throw new ArgumentException("Unable to encode as TSV.", nameof(Object));
159
160 if (Encoding is null)
161 Encoding = Encoding.UTF8;
162
163 return Task.FromResult(new KeyValuePair<byte[], string>(Encoding.GetBytes(Tsv), "text/tab-separated-values"));
164 }
165 }
166}
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.
Helps with common TSV-related tasks. (TSV=TAB Separated Values)
Definition: TSV.cs:13
static string Encode(string[][] Records)
Encodes records as a Comma-separated values string.
Definition: TSV.cs:201
static string[][] Parse(string Tsv)
Parses a TSV string.
Definition: TSV.cs:21
string[] ContentTypes
Supported content types.
Definition: TsvCodec.cs:35
Task< KeyValuePair< byte[], string > > EncodeAsync(object Object, Encoding Encoding, params string[] AcceptedContentTypes)
Encodes an object.
Definition: TsvCodec.cs:149
bool TryGetFileExtension(string ContentType, out string FileExtension)
Tries to get the file extension of an item, given its Content-Type.
Definition: TsvCodec.cs:105
bool Encodes(object Object, out Grade Grade, params string[] AcceptedContentTypes)
If the encoder encodes a given object.
Definition: TsvCodec.cs:126
bool TryGetContentType(string FileExtension, out string ContentType)
Tries to get the content type of an item, given its file extension.
Definition: TsvCodec.cs:85
static readonly string[] TsvFileExtensions
TSV content types.
Definition: TsvCodec.cs:30
string[] FileExtensions
Supported file extensions.
Definition: TsvCodec.cs:40
bool Decodes(string ContentType, out Grade Grade)
If the decoder decodes an object with a given content type.
Definition: TsvCodec.cs:48
Task< object > DecodeAsync(string ContentType, byte[] Data, Encoding Encoding, KeyValuePair< string, string >[] Fields, Uri BaseUri)
Decodes an object.
Definition: TsvCodec.cs:72
static readonly string[] TsvContentTypes
TSV content types.
Definition: TsvCodec.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