///|
/// OCF block compression codecs supported by this release line.
pub(all) enum CompressionCodec {
Null
Deflate
} derive(Debug, Eq)
///|
pub fn CompressionCodec::name(self : CompressionCodec) -> String {
match self {
Null => "null"
Deflate => "deflate"
}
}
///|
pub fn CompressionCodec::parse(
name : String,
) -> CompressionCodec raise OcfError {
match name {
"null" => Null
"deflate" => Deflate
unsupported => raise UnsupportedCodec(unsupported)
}
}
///|
/// Parsed OCF header. The metadata map is kept intact so applications do not
/// lose vendor-specific fields.
pub struct OcfHeader {
schema : @schema.Schema
codec : CompressionCodec
metadata : Map[String, Bytes]
sync_marker : Bytes
} derive(Debug, Eq)
///|
pub fn OcfHeader::new(
schema : @schema.Schema,
codec? : CompressionCodec = Null,
metadata? : Map[String, Bytes] = Map([]),
sync_marker : Bytes,
) -> OcfHeader raise OcfError {
if sync_marker.length() != 16 {
raise InvalidSyncMarkerLength(actual=sync_marker.length())
}
{ schema, codec, metadata, sync_marker }
}
///|
pub fn OcfHeader::schema(self : OcfHeader) -> @schema.Schema {
self.schema
}
///|
pub fn OcfHeader::codec(self : OcfHeader) -> CompressionCodec {
self.codec
}
///|
pub fn OcfHeader::metadata(self : OcfHeader) -> Map[String, Bytes] {
self.metadata.copy()
}
///|
pub fn OcfHeader::sync_marker(self : OcfHeader) -> Bytes {
self.sync_marker
}
///|
/// Apache Avro Object Container File magic bytes.
pub fn magic() -> Bytes {
[b'O', b'b', b'j', 1]
}
///|
pub fn is_ocf(data : Bytes) -> Bool {
data.has_prefix(magic())
}