#![cfg_attr(not(test), deny(clippy::unwrap_used, clippy::expect_used))]
#![cfg_attr(
test,
allow(
clippy::expect_used,
clippy::unwrap_used,
clippy::panic,
clippy::duplicated_attributes
)
)]
#![allow(clippy::missing_inline_in_public_items)]
#![allow(clippy::missing_errors_doc)]
#![allow(clippy::missing_panics_doc)]
#![allow(clippy::format_push_string)]
#![allow(clippy::uninlined_format_args)]
#![allow(clippy::match_same_arms)]
#![allow(clippy::module_name_repetitions)]
#![allow(clippy::too_many_lines)]
#![allow(clippy::must_use_candidate)]
#![allow(clippy::collapsible_else_if)]
#![allow(clippy::unused_self)]
#![allow(clippy::doc_markdown)]
#![allow(clippy::unnecessary_wraps)]
#![allow(clippy::cast_possible_wrap)]
#![allow(clippy::bool_to_int_with_if)]
#![allow(clippy::cast_lossless)]
#![allow(clippy::cast_sign_loss)]
#![allow(clippy::assigning_clones)]
#![allow(clippy::cast_possible_truncation)]
#![allow(clippy::manual_midpoint)]
#![allow(clippy::redundant_closure_for_method_calls)]
#![allow(clippy::single_match_else)]
#![allow(clippy::ignored_unit_patterns)]
#[cfg(feature = "audit")]
pub mod audit;
pub mod dialect;
pub mod error {
pub use copybook_error::*;
}
pub mod error_reporter;
pub mod feature_flags;
pub mod layout;
pub mod lexer;
pub mod parser;
pub mod pic;
pub mod projection;
pub mod schema;
pub mod support_matrix;
pub mod utils;
pub use copybook_utils::{OptionExt, SliceExt, VecExt, safe_ops};
pub use dialect::Dialect;
pub use error::{Error, ErrorCode, ErrorContext, Result};
pub use error_reporter::{ErrorMode, ErrorReport, ErrorReporter, ErrorSeverity, ErrorSummary};
pub use feature_flags::{Feature, FeatureCategory, FeatureFlags, FeatureFlagsHandle, all_features};
pub use parser::ParseOptions;
pub use projection::project_schema;
pub use schema::{Field, FieldKind, Occurs, Schema, SignPlacement, SignSeparateInfo, TailODO};
#[cfg(feature = "audit")]
pub use audit::*;
#[cfg(not(feature = "audit"))]
pub mod audit {
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct AuditContext {
}
impl AuditContext {
#[inline]
pub fn new() -> Self {
Self::default()
}
#[inline]
pub fn new_lightweight() -> Self {
Self::default()
}
#[inline]
#[must_use]
pub fn with_operation_id(self, _id: impl Into<String>) -> Self {
self }
#[inline]
#[must_use]
pub fn with_user(self, _user: impl Into<String>) -> Self {
self
}
#[inline]
#[must_use]
pub fn with_security_classification(self, _classification: SecurityClassification) -> Self {
self
}
#[inline]
#[must_use]
pub fn with_compliance_profile(self, _profile: ComplianceProfile) -> Self {
self
}
#[inline]
#[must_use]
pub fn with_metadata(self, _key: impl Into<String>, _value: impl Into<String>) -> Self {
self
}
#[inline]
#[must_use]
pub fn create_lightweight_child_context(&self, _id: impl Into<String>) -> Self {
self.clone()
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum ComplianceProfile {
SOX,
HIPAA,
GDPR,
PCIQDSS,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum SecurityClassification {
Public,
Internal,
Confidential,
MaterialTransaction,
PHI,
}
pub mod context {
pub use super::*;
}
}
#[inline]
#[must_use = "Handle the Result or propagate the error"]
pub fn parse_copybook(text: &str) -> Result<Schema> {
parser::parse(text)
}
#[inline]
#[must_use = "Handle the Result or propagate the error"]
pub fn parse_copybook_with_options(text: &str, options: &ParseOptions) -> Result<Schema> {
parser::parse_with_options(text, options)
}