2024-08-21 13:05:44 +02:00
|
|
|
[workspace]
|
Add more benchmarks; Redefine 'bool' scheme; Remove 'BoolDecodeError'; Rename project to *oct*; Rename 'librum' crate to 'oct'; Rename 'librum-macros' crate to 'oct-macros'; Rename 'librum-benchmarks' crate to 'oct-benchmarks'; Update lints; Update logo; Restructure tests; Rename 'IStream' to 'Input'; Rename 'OStream' to 'Output'; Make 'Output::write' and 'Input::{read, read_into}' fallible; Add 'OutputError' and 'InputError' error types; Mark 'Output::write' and 'Input::{read, read_into}' with 'const'; Add 'position', 'capacity', and 'remaining' methods to 'Output' and 'Input'; Rename 'SizeError' to 'LengthError'; Rework some error types; Fix feature flags for 'From<CStringDecodeError>' for 'GenericDecodeError'; Rename 'Buf' to 'Slot'; Remove '{Output, Input}::close'; Implement 'AsRef<[u8]>', 'Borrow<[u8]>', 'PartialEq<{Self, [u8], &[u8], &mut [u8]}>', and 'Eq' for 'Output'; Add 'as_slice' and 'as_ptr' methods to 'Output'; Add 'encode' and 'decode' modules; Update homepage link; Refactor code; Update readme;
2024-12-20 11:40:26 +01:00
|
|
|
members = ["oct", "oct-benchmarks", "oct-macros"]
|
2024-08-21 13:05:44 +02:00
|
|
|
resolver = "2"
|
2024-06-08 10:32:46 +02:00
|
|
|
|
2024-08-21 13:05:44 +02:00
|
|
|
[workspace.package]
|
2024-12-21 10:27:23 +01:00
|
|
|
authors = ["Gabriel Bjørnager Jensen"]
|
|
|
|
readme = "README.md"
|
|
|
|
repository = "https://mandelbrot.dk/oct/"
|
|
|
|
keywords = ["api", "encoding", "io", "network", "no-std"]
|
|
|
|
categories = ["encoding", "network-programming", "parsing"]
|
2024-08-21 13:05:44 +02:00
|
|
|
|
|
|
|
[workspace.lints.clippy]
|
2024-06-08 10:32:46 +02:00
|
|
|
as_ptr_cast_mut = "forbid"
|
Support custom errors in 'Encode' and 'Decode' (using associated 'Error' type); Further split 'EncodeError' into 'IsizeEncodeError', 'UsizeEncodeError', 'CollectionEncodeError', 'RefCellEncodeError', 'ItemEncodeError', and 'EnumEncodeError'; Fix the 'Encode' implementation of 'LinkedList'; Further split 'DecodeError' into 'BoolDecodeError', 'CharDecodeError', 'CStringDecodeError', 'NonZeroDecodeError', 'CollectionDecodeError', 'SystemTimeDecodeError', 'EnumDecodeError', and 'ItemDecodeError'; Honour custom discriminant types; Add 'DecodeBorrowed' trait (implement appropriately); Implement 'Decode' for 'Cow'; Refactor derive macros; Update lints; Rename test modules from 'test' to 'tests'; Restructure some trait implementations; Add 'proc-macro' feature flag; Add 'GenericEncodeError' and 'GenericDecodeError' error types for derived traits; Add 'PrimitiveDiscriminant' trait; Lock 'Arc' implementations behind atomic widths; Add '?Sized' clauses to some 'Encode' implementations; Update readme; Fix doc entry for 'SizedStr::new'; Update atomic tests; Make 'SizedEncode' a safe trait; Do not automatically implement 'Encode' when deriving 'SizedEncode'; Add 'copy_from_slice' method to 'SizedSlice'; Add 'each_ref' and 'each_mut' methods to 'SizedSlice'; Add more benchmarks; Remove Ciborium benchmarks; Rename project to *Librum*; Rename 'bzipper' crate to 'librum'; Rename 'bzipper_macros' crate to 'librum-macros'; Rename 'bzipper_benchmarks' crate to 'librum-benchmarks';
2024-11-24 12:49:13 +01:00
|
|
|
as_underscore = "forbid"
|
2024-06-08 10:32:46 +02:00
|
|
|
assertions_on_result_states = "warn"
|
|
|
|
bool_to_int_with_if = "warn"
|
|
|
|
borrow_as_ptr = "forbid"
|
|
|
|
branches_sharing_code = "warn"
|
|
|
|
cast_lossless = "warn"
|
|
|
|
cast_possible_wrap = "warn"
|
|
|
|
cast_ptr_alignment = "forbid"
|
|
|
|
checked_conversions = "warn"
|
|
|
|
clear_with_drain = "warn"
|
|
|
|
cloned_instead_of_copied = "warn"
|
|
|
|
collection_is_never_read = "warn"
|
|
|
|
dbg_macro = "warn"
|
|
|
|
debug_assert_with_mut_call = "warn"
|
|
|
|
deref_by_slicing = "warn"
|
|
|
|
derive_partial_eq_without_eq = "deny"
|
|
|
|
empty_enum = "warn"
|
|
|
|
empty_enum_variants_with_brackets = "warn"
|
|
|
|
empty_line_after_doc_comments = "warn"
|
|
|
|
empty_line_after_outer_attr = "warn"
|
|
|
|
empty_structs_with_brackets = "warn"
|
Add more benchmarks; Redefine 'bool' scheme; Remove 'BoolDecodeError'; Rename project to *oct*; Rename 'librum' crate to 'oct'; Rename 'librum-macros' crate to 'oct-macros'; Rename 'librum-benchmarks' crate to 'oct-benchmarks'; Update lints; Update logo; Restructure tests; Rename 'IStream' to 'Input'; Rename 'OStream' to 'Output'; Make 'Output::write' and 'Input::{read, read_into}' fallible; Add 'OutputError' and 'InputError' error types; Mark 'Output::write' and 'Input::{read, read_into}' with 'const'; Add 'position', 'capacity', and 'remaining' methods to 'Output' and 'Input'; Rename 'SizeError' to 'LengthError'; Rework some error types; Fix feature flags for 'From<CStringDecodeError>' for 'GenericDecodeError'; Rename 'Buf' to 'Slot'; Remove '{Output, Input}::close'; Implement 'AsRef<[u8]>', 'Borrow<[u8]>', 'PartialEq<{Self, [u8], &[u8], &mut [u8]}>', and 'Eq' for 'Output'; Add 'as_slice' and 'as_ptr' methods to 'Output'; Add 'encode' and 'decode' modules; Update homepage link; Refactor code; Update readme;
2024-12-20 11:40:26 +01:00
|
|
|
enum_glob_use = "forbid"
|
2024-06-08 10:32:46 +02:00
|
|
|
enum_variant_names = "allow"
|
|
|
|
equatable_if_let = "warn"
|
|
|
|
excessive_precision = "allow"
|
|
|
|
exit = "warn"
|
|
|
|
expl_impl_clone_on_copy = "warn"
|
|
|
|
explicit_deref_methods = "warn"
|
|
|
|
explicit_into_iter_loop = "warn"
|
|
|
|
explicit_iter_loop = "warn"
|
|
|
|
fallible_impl_from = "deny"
|
|
|
|
flat_map_option = "warn"
|
|
|
|
float_cmp = "deny" # Fortran, is that you?
|
|
|
|
float_cmp_const = "deny"
|
|
|
|
format_push_string = "warn"
|
|
|
|
from_iter_instead_of_collect = "warn"
|
|
|
|
future_not_send = "deny"
|
|
|
|
if_not_else = "warn"
|
|
|
|
if_then_some_else_none = "warn"
|
|
|
|
impl_trait_in_params = "warn"
|
|
|
|
implicit_clone = "warn"
|
|
|
|
imprecise_flops = "deny"
|
|
|
|
inconsistent_struct_constructor = "deny"
|
|
|
|
index_refutable_slice = "warn"
|
|
|
|
inefficient_to_string = "warn"
|
|
|
|
infinite_loop = "deny"
|
|
|
|
into_iter_without_iter = "deny"
|
|
|
|
invalid_upcast_comparisons = "warn"
|
|
|
|
iter_filter_is_ok = "warn"
|
|
|
|
iter_filter_is_some = "warn"
|
|
|
|
iter_not_returning_iterator = "deny"
|
|
|
|
iter_on_empty_collections = "warn"
|
|
|
|
iter_on_single_items = "warn"
|
|
|
|
iter_with_drain = "warn"
|
|
|
|
iter_without_into_iter = "deny"
|
|
|
|
macro_use_imports = "warn"
|
|
|
|
manual_assert = "warn"
|
|
|
|
manual_c_str_literals = "warn"
|
|
|
|
manual_instant_elapsed = "warn"
|
|
|
|
manual_is_variant_and = "warn"
|
|
|
|
manual_let_else = "warn"
|
|
|
|
manual_ok_or = "warn"
|
|
|
|
manual_string_new = "warn"
|
|
|
|
map_unwrap_or = "warn"
|
|
|
|
match_bool = "warn"
|
|
|
|
match_on_vec_items = "warn"
|
|
|
|
match_same_arms = "warn"
|
|
|
|
mismatching_type_param_order = "warn"
|
2024-11-03 21:52:22 +01:00
|
|
|
missing_transmute_annotations = "forbid"
|
2024-06-08 10:32:46 +02:00
|
|
|
mixed_read_write_in_expression = "deny"
|
|
|
|
mut_mut = "deny"
|
|
|
|
mutex_atomic = "deny"
|
|
|
|
mutex_integer = "deny"
|
|
|
|
needless_bitwise_bool = "deny"
|
|
|
|
needless_collect = "warn"
|
|
|
|
needless_continue = "warn"
|
|
|
|
needless_raw_string_hashes = "warn"
|
|
|
|
needless_raw_strings = "warn"
|
|
|
|
no_effect_underscore_binding = "deny"
|
|
|
|
no_mangle_with_rust_abi = "deny"
|
|
|
|
non_ascii_literal = "forbid"
|
|
|
|
nonstandard_macro_braces = "warn"
|
|
|
|
option_as_ref_cloned = "warn"
|
|
|
|
option_if_let_else = "warn"
|
|
|
|
option_option = "deny"
|
|
|
|
or_fun_call = "deny"
|
|
|
|
path_buf_push_overwrite = "deny"
|
|
|
|
pattern_type_mismatch = "deny"
|
|
|
|
ptr_as_ptr = "forbid"
|
|
|
|
ptr_cast_constness = "forbid"
|
|
|
|
pub_underscore_fields = "deny"
|
|
|
|
read_zero_byte_vec = "deny"
|
|
|
|
redundant_clone = "deny"
|
|
|
|
redundant_closure_for_method_calls = "warn"
|
|
|
|
redundant_else = "warn"
|
|
|
|
redundant_type_annotations = "warn"
|
|
|
|
ref_as_ptr = "deny"
|
|
|
|
ref_binding_to_reference = "warn"
|
|
|
|
ref_option_ref = "deny"
|
|
|
|
rest_pat_in_fully_bound_structs = "warn"
|
|
|
|
return_self_not_must_use = "deny"
|
|
|
|
same_functions_in_if_condition = "deny"
|
|
|
|
same_name_method = "deny"
|
|
|
|
self_named_module_files = "deny"
|
Rename 'FixedString' to 'SizedStr'; Implement 'PartialEq<String>' and 'PartialOrd<String>' for 'SizedStr'; Add constructors 'from_utf8' and 'from_utf8_unchecked' to 'SizedStr'; Remove 'pop', 'push_str', and 'push' from 'SizedStr'; Implement 'FromIterator<char>' for 'SizedStr'; Rename 'Serialise' to 'Encode'; Rename 'Deserialise' to 'Decode'; Remove 'Sized' requirement for 'Encode'; Add benchmarks; Update package metadata; Rename 'Sstream' to 'OStream'; Rename 'Dstream' to 'IStream'; Update readme; Refactor code; Update lints; Implement 'Encode' and 'Decode' for 'IpAddr', 'Ipv4Addr', 'Ipv6Addr', 'Mutex', 'Box', 'RwLock', 'Rc', 'Arc', 'Wrapping', 'Saturating', 'AtomicBool', 'AtomicU8', 'AtomicU16', 'AtomicU32', 'AtomicU64', 'AtomicI8', 'AtomicI16', 'AtomicI32', 'AtomicI64', 'AtomicUsize', 'AtomicIsize', 'SocketAddrV4', 'SocketAddrV6', 'SocketAddr', 'Range', 'RangeFrom', 'RangeFull', 'RangeInclusive', 'RangeTo', 'RangeToInclusive', 'Bound', 'RefCell', 'String', and 'Vec'; Update docs; Add 'SizedSlice' type; Add 'SizedIter' type; Rename 'Buffer' type to 'Buf'; Remove 'Add' and 'AddAssign' implementations from 'SizedStr'; Add *Features* section to readme; Honour explicit enumeration discriminants; Encode enumeration discriminants as 'isize'; Add 'SizedEncode' trait; Outsource 'MAX_SERIALISED_SIZE' to 'SizedEncode' as 'MAX_ENCODED_SIZE'; Implement 'Iterator', 'ExactSizeIterator', 'FusedIterator', and 'DoubleEndedIterator' for 'SizedIter'; Implement 'AsRef<[T]>' and 'AsMut<[T]>' for 'SizedIter<T, ..>'; Implement 'Clone' for 'SizedIter'; Add 'as_slice' and 'as_mut_slice' methods to 'SizedIter'; Add 'from_raw_parts' constructor and 'into_raw_parts' destructor to 'SizedSlice'; Add 'set_len' method to 'SizedSlice'; Add 'len', 'is_empty', 'is_full', and 'capacity' methods to 'SizedSlice'; Add 'as_slice' and 'as_mut_slice' methods to 'SizedSlice'; Add 'as_ptr' and 'as_mut_ptr' methods to 'SizedSlice'; Implement 'AsMut<[T]>' and 'AsRef<[T]>' for 'SizedSlice<T, ..>'; Implement 'Borrow<[T]>' and 'BorrowMut<[T]>' for 'SizedSlice<T, ..>'; Implement 'Deref<[T]>' and 'DerefMut<[T]>' for 'SizedSlice<T, ..>'; Implement 'Debug' for 'SizedSlice'; Implement 'Default' for 'SizedSlice'; Implement 'Clone' for 'SizedSlice'; Implement 'Encode', 'Decode', and 'SizedEncode' for 'SizedSlice'; Implement 'Eq' and 'PartialEq' for 'SizedSlice'; Implement 'Ord' and 'PartialOrd' for 'SizedSlice'; Implement 'From<[T; N]>' for 'SizedSlice<T, N>'; Implement 'Hash' for 'SizedSlice'; Implement 'Index' and 'IndexMut' for 'SizedSlice'; Implement 'IntoIterator' for 'SizedSlice' (including references hereto); Implement 'TryFrom<&[T]>' for 'SizedSlice<T, ..>'; Implement 'From<SizedSlice<T, ..>>' for 'Vec<[T]>'; Implement 'From<SizedSlice<T, ..>>' for 'Box<[T]>'; Add 'into_boxed_slice' and 'into_vec' destructors to 'SizedSlice'; Add 'into_boxed_str' and 'into_string' destructors to 'SizedStr'; Bump Rust version to '1.83' for 'bzipper'; Mark 'SizedStr::as_mut_ptr' as const; Implement 'FromIterator<T>' for 'SizedSlice<T, ..>'; Make 'SizedStr::new' take a '&str' object; Add 'is_empty' and 'is_full' methods to 'Buf'; Disallow non-empty single-line functions; Add 'SAFETY' comments; Implement 'PartialEq<&mut [u8]>' and 'PartialEq<[u8]>' for 'Buf'; Implement 'Index' and 'IndexMut' for 'Buf'; Add 'from_raw_parts' constructor and 'into_raw_parts' destructor to 'Buf'; Add *Documentation* and *Contribution* sections to readme; Add *Copyright & Licence* section to readme; Add Clippy configuration file; Add more unit tests; Add debug assertions; Remove 'as_ptr' and 'as_slice' methods from 'IStream' and 'OStream'; Remove 'len', 'is_empty', and 'is_full' methods from 'IStream' and 'OStream'; Unimplement all manually-implemented traits from 'IStream' and 'OStream'; Mark 'new' and 'write' in 'OStream' as const; Mark the 'read' method in 'IStream' as const; Add 'close' destructor to 'OStream' and 'IStream'; Implement 'Encode' for '[T]' and 'str'; Encode 'usize' and 'isize' as 'u16' and 'i16' again; Split 'Error' type into 'EncodeError', 'DecodeError', 'Utf8Error', 'Utf16Error', 'SizeError', and 'StringError'; Remove 'Result' type; Add 'error' module; Make 'IStream::read' and 'OSream::write' panic on error; Update logo; Add more examples to docs; Unmark all functions in 'Buf' as const; Implement 'From<SizedStr>' for 'Box<str>'; Always implement 'Freeze', 'RefUnwindSafe', 'Send', 'Sync', 'Unpin', and 'UnwindSafe' for 'Buf'; Add *Examples* section to readme; Implement 'SizedEncode' for all previous 'Encode' types; Bump dependency versions;
2024-10-30 13:06:15 +01:00
|
|
|
separated_literal_suffix = "warn"
|
2024-06-08 10:32:46 +02:00
|
|
|
single_char_pattern = "warn"
|
|
|
|
str_split_at_newline = "warn"
|
|
|
|
string_lit_as_bytes = "deny"
|
|
|
|
string_lit_chars_any = "deny"
|
|
|
|
string_to_string = "deny"
|
|
|
|
suboptimal_flops = "deny"
|
|
|
|
trait_duplication_in_bounds = "deny"
|
|
|
|
transmute_ptr_to_ptr = "deny"
|
|
|
|
type_repetition_in_bounds = "deny"
|
|
|
|
uninhabited_references = "deny"
|
|
|
|
uninlined_format_args = "deny"
|
|
|
|
unnecessary_box_returns = "deny"
|
|
|
|
unnecessary_join = "deny"
|
|
|
|
unnecessary_self_imports = "deny"
|
|
|
|
unnecessary_wraps = "warn"
|
|
|
|
unneeded_field_pattern = "warn"
|
|
|
|
unnested_or_patterns = "warn"
|
|
|
|
unused_async = "warn"
|
|
|
|
unused_peekable = "warn"
|
|
|
|
unused_rounding = "warn"
|
|
|
|
use_self = "deny"
|
|
|
|
used_underscore_binding = "deny"
|
|
|
|
useless_let_if_seq = "warn"
|
|
|
|
verbose_bit_mask = "warn"
|
|
|
|
verbose_file_reads = "warn"
|
|
|
|
wildcard_dependencies = "deny"
|
Rename 'FixedString' to 'SizedStr'; Implement 'PartialEq<String>' and 'PartialOrd<String>' for 'SizedStr'; Add constructors 'from_utf8' and 'from_utf8_unchecked' to 'SizedStr'; Remove 'pop', 'push_str', and 'push' from 'SizedStr'; Implement 'FromIterator<char>' for 'SizedStr'; Rename 'Serialise' to 'Encode'; Rename 'Deserialise' to 'Decode'; Remove 'Sized' requirement for 'Encode'; Add benchmarks; Update package metadata; Rename 'Sstream' to 'OStream'; Rename 'Dstream' to 'IStream'; Update readme; Refactor code; Update lints; Implement 'Encode' and 'Decode' for 'IpAddr', 'Ipv4Addr', 'Ipv6Addr', 'Mutex', 'Box', 'RwLock', 'Rc', 'Arc', 'Wrapping', 'Saturating', 'AtomicBool', 'AtomicU8', 'AtomicU16', 'AtomicU32', 'AtomicU64', 'AtomicI8', 'AtomicI16', 'AtomicI32', 'AtomicI64', 'AtomicUsize', 'AtomicIsize', 'SocketAddrV4', 'SocketAddrV6', 'SocketAddr', 'Range', 'RangeFrom', 'RangeFull', 'RangeInclusive', 'RangeTo', 'RangeToInclusive', 'Bound', 'RefCell', 'String', and 'Vec'; Update docs; Add 'SizedSlice' type; Add 'SizedIter' type; Rename 'Buffer' type to 'Buf'; Remove 'Add' and 'AddAssign' implementations from 'SizedStr'; Add *Features* section to readme; Honour explicit enumeration discriminants; Encode enumeration discriminants as 'isize'; Add 'SizedEncode' trait; Outsource 'MAX_SERIALISED_SIZE' to 'SizedEncode' as 'MAX_ENCODED_SIZE'; Implement 'Iterator', 'ExactSizeIterator', 'FusedIterator', and 'DoubleEndedIterator' for 'SizedIter'; Implement 'AsRef<[T]>' and 'AsMut<[T]>' for 'SizedIter<T, ..>'; Implement 'Clone' for 'SizedIter'; Add 'as_slice' and 'as_mut_slice' methods to 'SizedIter'; Add 'from_raw_parts' constructor and 'into_raw_parts' destructor to 'SizedSlice'; Add 'set_len' method to 'SizedSlice'; Add 'len', 'is_empty', 'is_full', and 'capacity' methods to 'SizedSlice'; Add 'as_slice' and 'as_mut_slice' methods to 'SizedSlice'; Add 'as_ptr' and 'as_mut_ptr' methods to 'SizedSlice'; Implement 'AsMut<[T]>' and 'AsRef<[T]>' for 'SizedSlice<T, ..>'; Implement 'Borrow<[T]>' and 'BorrowMut<[T]>' for 'SizedSlice<T, ..>'; Implement 'Deref<[T]>' and 'DerefMut<[T]>' for 'SizedSlice<T, ..>'; Implement 'Debug' for 'SizedSlice'; Implement 'Default' for 'SizedSlice'; Implement 'Clone' for 'SizedSlice'; Implement 'Encode', 'Decode', and 'SizedEncode' for 'SizedSlice'; Implement 'Eq' and 'PartialEq' for 'SizedSlice'; Implement 'Ord' and 'PartialOrd' for 'SizedSlice'; Implement 'From<[T; N]>' for 'SizedSlice<T, N>'; Implement 'Hash' for 'SizedSlice'; Implement 'Index' and 'IndexMut' for 'SizedSlice'; Implement 'IntoIterator' for 'SizedSlice' (including references hereto); Implement 'TryFrom<&[T]>' for 'SizedSlice<T, ..>'; Implement 'From<SizedSlice<T, ..>>' for 'Vec<[T]>'; Implement 'From<SizedSlice<T, ..>>' for 'Box<[T]>'; Add 'into_boxed_slice' and 'into_vec' destructors to 'SizedSlice'; Add 'into_boxed_str' and 'into_string' destructors to 'SizedStr'; Bump Rust version to '1.83' for 'bzipper'; Mark 'SizedStr::as_mut_ptr' as const; Implement 'FromIterator<T>' for 'SizedSlice<T, ..>'; Make 'SizedStr::new' take a '&str' object; Add 'is_empty' and 'is_full' methods to 'Buf'; Disallow non-empty single-line functions; Add 'SAFETY' comments; Implement 'PartialEq<&mut [u8]>' and 'PartialEq<[u8]>' for 'Buf'; Implement 'Index' and 'IndexMut' for 'Buf'; Add 'from_raw_parts' constructor and 'into_raw_parts' destructor to 'Buf'; Add *Documentation* and *Contribution* sections to readme; Add *Copyright & Licence* section to readme; Add Clippy configuration file; Add more unit tests; Add debug assertions; Remove 'as_ptr' and 'as_slice' methods from 'IStream' and 'OStream'; Remove 'len', 'is_empty', and 'is_full' methods from 'IStream' and 'OStream'; Unimplement all manually-implemented traits from 'IStream' and 'OStream'; Mark 'new' and 'write' in 'OStream' as const; Mark the 'read' method in 'IStream' as const; Add 'close' destructor to 'OStream' and 'IStream'; Implement 'Encode' for '[T]' and 'str'; Encode 'usize' and 'isize' as 'u16' and 'i16' again; Split 'Error' type into 'EncodeError', 'DecodeError', 'Utf8Error', 'Utf16Error', 'SizeError', and 'StringError'; Remove 'Result' type; Add 'error' module; Make 'IStream::read' and 'OSream::write' panic on error; Update logo; Add more examples to docs; Unmark all functions in 'Buf' as const; Implement 'From<SizedStr>' for 'Box<str>'; Always implement 'Freeze', 'RefUnwindSafe', 'Send', 'Sync', 'Unpin', and 'UnwindSafe' for 'Buf'; Add *Examples* section to readme; Implement 'SizedEncode' for all previous 'Encode' types; Bump dependency versions;
2024-10-30 13:06:15 +01:00
|
|
|
zero_prefixed_literal = "allow"
|
2024-06-08 10:32:46 +02:00
|
|
|
zero_sized_map_values = "deny"
|
|
|
|
|
|
|
|
[profile.release]
|
|
|
|
codegen-units = 1
|
|
|
|
|
|
|
|
lto = "fat"
|
|
|
|
opt-level = 3
|