diff --git a/CHANGELOG.md b/CHANGELOG.md
index c4d26fcf6..2a310a8a4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,7 @@
### Features
1. [#376](https://github.com/influxdata/influxdb-client-csharp/pull/376): Add `FluxRecord.Row` which stores response data in a list
+1. [#404](https://github.com/influxdata/influxdb-client-csharp/pull/404): Expose `FluxCsvParser` as `AnnotatedCsvParser`
### Dependencies
Update dependencies:
diff --git a/Client.Core/Flux/Serialization/AnnotatedCsvParser.cs b/Client.Core/Flux/Serialization/AnnotatedCsvParser.cs
new file mode 100644
index 000000000..a7173c054
--- /dev/null
+++ b/Client.Core/Flux/Serialization/AnnotatedCsvParser.cs
@@ -0,0 +1,48 @@
+using System.Collections.Generic;
+using System.Threading;
+using InfluxDB.Client.Core.Flux.Domain;
+using InfluxDB.Client.Core.Flux.Internal;
+
+namespace InfluxDB.Client.Core.Flux.Serialization
+{
+ public interface IAnnotatedCsvParser
+ {
+ ///
+ /// Parsing query results in annotated CSV format into list of .
+ ///
+ /// Query results in annotated CSV format
+ /// To cancel the parsing
+ /// Parsed Annotated CSV into list of
+ List Parse(string annotatedCsv, CancellationToken cancellationToken = default);
+ }
+
+ ///
+ /// Parser for processing Annotated CSV.
+ ///
+ public class AnnotatedCsvParser : IAnnotatedCsvParser
+ {
+ private readonly FluxCsvParser _parser;
+
+ ///
+ /// Public constructor.
+ ///
+ public AnnotatedCsvParser()
+ {
+ _parser = new FluxCsvParser();
+ }
+
+ ///
+ /// Parsing query results in annotated CSV format into list of .
+ ///
+ /// Query results in annotated CSV format
+ /// To cancel the parsing
+ /// Parsed Annotated CSV into list of
+ public List Parse(string annotatedCsv, CancellationToken cancellationToken = default)
+ {
+ var consumer = new FluxCsvParser.FluxResponseConsumerTable();
+ _parser.ParseFluxResponse(annotatedCsv, cancellationToken, consumer);
+
+ return consumer.Tables;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Client.Legacy.Test/FluxCsvParserTest.cs b/Client.Legacy.Test/FluxCsvParserTest.cs
index d6a85d986..157c92f09 100644
--- a/Client.Legacy.Test/FluxCsvParserTest.cs
+++ b/Client.Legacy.Test/FluxCsvParserTest.cs
@@ -7,6 +7,7 @@
using InfluxDB.Client.Core.Flux.Domain;
using InfluxDB.Client.Core.Flux.Exceptions;
using InfluxDB.Client.Core.Flux.Internal;
+using InfluxDB.Client.Core.Flux.Serialization;
using NodaTime;
using NodaTime.Text;
using NUnit.Framework;
@@ -793,6 +794,23 @@ public void ParseDuplicateColumnNames()
Assert.AreEqual(25.3, tables[0].Records[0].Row[7]);
}
+ [Test]
+ public void AnnotatedCsvParser()
+ {
+ const string data =
+ "#datatype,string,long,dateTime:RFC3339,dateTime:RFC3339,string,string,string,string,long,long,string\n"
+ + "#group,false,false,true,true,true,true,true,true,false,false,false\n"
+ + "#default,_result,,,,,,,,,,\n"
+ + ",result,table,_start,_stop,_field,_measurement,host,region,_value2,value1,value_str\n"
+ + ",,0,1677-09-21T00:12:43.145224192Z,2018-07-16T11:21:02.547596934Z,free,mem,A,west,121,11,test\n"
+ + ",,1,1677-09-21T00:12:43.145224192Z,2018-07-16T11:21:02.547596934Z,free,mem,B,west,484,22,test\n"
+ + ",,2,1677-09-21T00:12:43.145224192Z,2018-07-16T11:21:02.547596934Z,usage_system,cpu,A,west,1444,38,test\n"
+ + ",,3,1677-09-21T00:12:43.145224192Z,2018-07-16T11:21:02.547596934Z,user_usage,cpu,A,west,2401,49,test";
+
+ var tables = new AnnotatedCsvParser().Parse(data);
+ Assert.AreEqual(4, tables.Count);
+ }
+
private List ParseFluxResponse(string data)
{
var consumer = new FluxCsvParser.FluxResponseConsumerTable();