Crates.io | line-protocol |
lib.rs | line-protocol |
version | 0.1.0 |
created_at | 2025-08-20 01:46:28.691174+00 |
updated_at | 2025-08-20 01:46:28.691174+00 |
description | Implementation of Influx's line protocol |
homepage | https://gitlab.com/gpollo/line-protocol |
repository | https://gitlab.com/gpollo/line-protocol |
max_upload_size | |
id | 1802768 |
size | 52,179 |
This crate offers helper types and macros to build line protocol strings.
To generate line protocols, your type must implement [LineProtocol
] trait.
You can also implement [LineProtocolTag
] for custom types to be used as tags.
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,
}
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()
}
}
Both automatic and manual implementations shown above require that your type implements helper traits.
LineProtocolTag
].LineProtocolField
].LineProtocolTimestamp
].