Struct ValidatedParquetLogline

Source
pub struct ValidatedParquetLogline<'a> {
Show 34 fields pub date: NaiveDate, pub time: &'a str, pub datetime: NaiveDateTime, pub x_edge_location: &'a str, pub sc_bytes: u64, pub c_ip: &'a str, pub cs_method: &'a str, pub cs_host: &'a str, pub cs_uri_stem: &'a str, pub sc_status: u16, pub cs_referer: Option<&'a str>, pub cs_user_agent: &'a str, pub cs_uri_query: Option<&'a str>, pub cs_cookie: Option<&'a str>, pub x_edge_result_type: &'a str, pub x_edge_request_id: &'a str, pub x_host_header: &'a str, pub cs_protocol: &'a str, pub cs_bytes: u64, pub time_taken: f64, pub x_forwarded_for: Option<&'a str>, pub ssl_protocol: Option<&'a str>, pub ssl_cipher: Option<&'a str>, pub x_edge_response_result_type: &'a str, pub cs_protocol_version: &'a str, pub fle_status: Option<&'a str>, pub fle_encrypted_fields: Option<u64>, pub c_port: u16, pub time_to_first_byte: f64, pub x_edge_detailed_result_type: &'a str, pub sc_content_type: Option<&'a str>, pub sc_content_len: Option<u64>, pub sc_range_start: Option<i64>, pub sc_range_end: Option<i64>,
}
Available on crate feature parquet only.
Expand description

The validated log line for parquet usage

Most fields are parsed into more meaningful types. Unfortunately, parquet_derive does not support all the types; thus we lower some fields down to:

  • &str / Option<&str> (instead of enums, NaiveTime, IpAddr)
  • f64 (instead of Duration)

On construction it checks if the line can be parsed. This is useful if you cannot skip the comment lines or have reason to not trust the input for format correctness. The latter should be only an issue if you do not use this crate on CloudFront logs directly.

§Panics

Construction can panic if the input is not a valid log line!

§Examples

Use .try_from() or .try_into() to construct an instance, since action can fail.

use cloudfront_logs::{borrowed::parquet::ValidatedLogline, types::*};

let line = "2019-12-04	21:02:31	LAX1	392	192.0.2.100	GET	d111111abcdef8.cloudfront.net	/index.html	200	-	Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/78.0.3904.108%20Safari/537.36	-	-	Hit	SOX4xwn4XV6Q4rgb7XiVGOHms_BGlTAC4KyHmureZmBNrjGdRLiNIQ==	d111111abcdef8.cloudfront.net	https	23	0.001	-	TLSv1.2	ECDHE-RSA-AES128-GCM-SHA256	Hit	HTTP/2.0	-	-	11040	0.001	Hit	text/html	78	-	-";

let item = ValidatedLogline::try_from(line).unwrap();
// alternative:
let item: ValidatedLogline<'_> = line.try_into().unwrap();

assert_eq!(item.date, NaiveDate::from_ymd_opt(2019, 12, 4).unwrap());
assert_eq!(item.sc_bytes, 392u64);
assert_eq!(item.cs_protocol, "https");

Fields§

§date: NaiveDate§time: &'a str§datetime: NaiveDateTime§x_edge_location: &'a str§sc_bytes: u64§c_ip: &'a str§cs_method: &'a str§cs_host: &'a str§cs_uri_stem: &'a str§sc_status: u16§cs_referer: Option<&'a str>§cs_user_agent: &'a str§cs_uri_query: Option<&'a str>§cs_cookie: Option<&'a str>§x_edge_result_type: &'a str§x_edge_request_id: &'a str§x_host_header: &'a str§cs_protocol: &'a str§cs_bytes: u64§time_taken: f64§x_forwarded_for: Option<&'a str>§ssl_protocol: Option<&'a str>§ssl_cipher: Option<&'a str>§x_edge_response_result_type: &'a str§cs_protocol_version: &'a str§fle_status: Option<&'a str>§fle_encrypted_fields: Option<u64>§c_port: u16§time_to_first_byte: f64§x_edge_detailed_result_type: &'a str§sc_content_type: Option<&'a str>§sc_content_len: Option<u64>§sc_range_start: Option<i64>§sc_range_end: Option<i64>

Implementations§

Source§

impl ValidatedLogline<'_>

Source

pub fn schema() -> &'static str

Source

pub fn schema_as_type() -> Type

Trait Implementations§

Source§

impl<'a> Clone for ValidatedLogline<'a>

Source§

fn clone(&self) -> ValidatedLogline<'a>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'a> Debug for ValidatedLogline<'a>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'a> From<UnvalidatedLogline<'a>> for ValidatedLogline<'a>

Source§

fn from(unvalidated: UnvalidatedLogline<'a>) -> Self

Converts to this type from the input type.
Source§

impl<'a> From<ValidatedLogline<'a>> for UnvalidatedLogline<'a>

Source§

fn from(validated: ValidatedLogline<'a>) -> Self

Converts to this type from the input type.
Source§

impl<'a> PartialEq for ValidatedLogline<'a>

Source§

fn eq(&self, other: &ValidatedLogline<'a>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<'a> RecordWriter<ValidatedLogline<'a>> for &[ValidatedLogline<'a>]

Source§

fn write_to_row_group<W: Write + Send>( &self, row_group_writer: &mut SerializedRowGroupWriter<'_, W>, ) -> Result<(), ParquetError>

Writes from self into row_group_writer.
Source§

fn schema(&self) -> Result<TypePtr, ParquetError>

Generated schema used by row_group_writer
Source§

impl<'a> TryFrom<&'a str> for ValidatedLogline<'a>

Source§

type Error = &'static str

The type returned in the event of a conversion error.
Source§

fn try_from(line: &'a str) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl<'a> TryFrom<Logline<'a, Validated>> for ValidatedLogline<'a>

Source§

type Error = &'static str

The type returned in the event of a conversion error.
Source§

fn try_from(raw: ValidatedRaw<'a>) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl<'a> StructuralPartialEq for ValidatedLogline<'a>

Auto Trait Implementations§

§

impl<'a> Freeze for ValidatedLogline<'a>

§

impl<'a> RefUnwindSafe for ValidatedLogline<'a>

§

impl<'a> Send for ValidatedLogline<'a>

§

impl<'a> Sync for ValidatedLogline<'a>

§

impl<'a> Unpin for ValidatedLogline<'a>

§

impl<'a> UnwindSafe for ValidatedLogline<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,