line-protocol

Crates.ioline-protocol
lib.rsline-protocol
version0.1.0
created_at2025-08-20 01:46:28.691174+00
updated_at2025-08-20 01:46:28.691174+00
descriptionImplementation of Influx's line protocol
homepagehttps://gitlab.com/gpollo/line-protocol
repositoryhttps://gitlab.com/gpollo/line-protocol
max_upload_size
id1802768
size52,179
Gabriel Guilbert (gpollo)

documentation

README

Line Protocol

This crate offers helper types and macros to build 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.

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.

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].
Commit count: 9

cargo fmt