line-protocol 0.1.0

Implementation of Influx's line protocol
Documentation
# Line Protocol

This crate offers helper types and macros to build [line protocol](https://docs.influxdata.com/influxdb/v2/reference/syntax/line-protocol/) strings.

## Usage

To generate line protocols, your type must implement [`LineProtocol`] trait.

You can also implement [`LineProtocolTag`] for custom types to be used as tags.

## Automatic Implementation

You can easily derive [`LineProtocol`] and [`LineProtocolTag`] from the types. 

```rust
use std::time::SystemTime;
use line_protocol::{LineProtocolTag, LineProtocol};

#[derive(LineProtocolTag)]
#[line_protocol(case = "kebab")]
enum Room {
    Kitchen,
    LivingRoom,
    Bathroom,
}

#[derive(LineProtocol)]
#[line_protocol(measurement = "environment")]
struct EnvironmentMeasurement {
    #[line_protocol(tag)]
    room: Room,
    #[line_protocol(field)]
    temperature: f32,
    #[line_protocol(field)]
    humidity: f32,
    #[line_protocol(timestamp)]
    timestamp: SystemTime,
}
```

## Manual Implementation

For more complex situations, you may implement the trait using the builder syntax.

```rust
use std::time::SystemTime;
use line_protocol::{LineProtocol, LineProtocolTag, LineProtocolBuilder};

struct EnvironmentMeasurement {
    room: String,
    temperature: f32,
    humidity: f32,
    timestamp: SystemTime,
}

impl LineProtocol for EnvironmentMeasurement {
    fn to_line_protocol(&self) -> Option<String> {
        LineProtocolBuilder::default()
            .measurement("environment")
            .tag("room", &self.room)
            .field("temperature", &self.temperature)
            .field("humidity", &self.humidity)
            .timestamp(&self.timestamp)
            .build()
    }
}
```

## Helper Traits

Both automatic and manual implementations shown above require that your type implements helper traits.

* If your field is a line protocol tag, it needs to implement [`LineProtocolTag`].
* If your field is a line protocol field, it needs to implement [`LineProtocolField`].
* If your field is a line protocol timestamp, it needs to implement [`LineProtocolTimestamp`].