[workspace]
members = ["lib", "macros", "tools/uniffi-bindgen"]
default-members = ["lib", "macros"]
resolver = "2"

[profile.release]
lto = true

[patch.crates-io]
blake2 = { path = "patches/blake2" }
tsify = { path = "patches/tsify" }
tsify-macros = { path = "patches/tsify/tsify-macros" }

# Commented lints are currently unstable and we want to try them ASAP.
[workspace.lints.rust]
deprecated_safe = "warn"
explicit_outlives_requirements = "warn"
#fuzzy_provenance_casts = "warn"
#impl_trait_overcaptures = "warn"
#lossy_provenance_casts = "warn"
macro_use_extern_crate = "warn"
meta_variable_misuse = "warn"
missing_abi = "warn"
missing_docs = "warn"
missing_unsafe_on_extern = "warn"
#multiple_supertrait_upcastable = "warn"
#must_not_suspend = "warn"
non_ascii_idents = "warn"
#non_exhaustive_omitted_patterns = "warn"
non_local_definitions = "warn"
redundant_lifetimes = "warn"
single_use_lifetimes = "warn"
unit_bindings = "warn"
unnameable_types = "warn"
unreachable_pub = "warn"
unsafe_op_in_unsafe_fn = "warn"
unstable_features = "warn"
unused_crate_dependencies = "warn"
unused_extern_crates = "warn"
unused_macro_rules = "warn"
unused_qualifications = "warn"
unused_results = "warn"
variant_size_differences = "warn"

[workspace.lints.rustdoc]
missing_crate_level_docs = "warn"
private_doc_tests = "warn"
unescaped_backticks = "warn"

# Commented lints are in a newer Clippy version or tied to unstable and we want
# to try them ASAP.
[workspace.lints.clippy]
# Pedantic
pedantic = "warn"
module_name_repetitions = { level = "allow", priority = 1 }
similar_names = { level = "allow", priority = 1 }
too_many_lines = { level = "allow", priority = 1 }
# Restriction
alloc_instead_of_core = { level = "warn", priority = 1 }
#allow_attributes = { level = "warn", priority = 1 }
#allow_attributes_without_reason = { level = "warn", priority = 1 }
arithmetic_side_effects = { level = "warn", priority = 1 }
as_underscore = { level = "warn", priority = 1 }
big_endian_bytes = { level = "warn", priority = 1 }
create_dir = { level = "warn", priority = 1 }
dbg_macro = { level = "warn", priority = 1 }
default_numeric_fallback = { level = "warn", priority = 1 }
deref_by_slicing = { level = "warn", priority = 1 }
empty_drop = { level = "warn", priority = 1 }
empty_enum_variants_with_brackets = { level = "warn", priority = 1 }
empty_structs_with_brackets = { level = "warn", priority = 1 }
error_impl_error = { level = "warn", priority = 1 }
exit = { level = "warn", priority = 1 }
filetype_is_file = { level = "warn", priority = 1 }
float_arithmetic = { level = "warn", priority = 1 }
float_cmp_const = { level = "warn", priority = 1 }
fn_to_numeric_cast_any = { level = "warn", priority = 1 }
format_push_string = { level = "warn", priority = 1 }
host_endian_bytes = { level = "warn", priority = 1 }
impl_trait_in_params = { level = "warn", priority = 1 }
indexing_slicing = { level = "warn", priority = 1 }
infinite_loop = { level = "warn", priority = 1 }
integer_division = { level = "warn", priority = 1 }
integer_division_remainder_used = { level = "warn", priority = 1 }
lossy_float_literal = { level = "warn", priority = 1 }
min_ident_chars = { level = "warn", priority = 1 }
missing_assert_message = { level = "warn", priority = 1 }
mixed_read_write_in_expression = { level = "warn", priority = 1 }
multiple_inherent_impl = { level = "warn", priority = 1 }
multiple_unsafe_ops_per_block = { level = "warn", priority = 1 }
mutex_atomic = { level = "warn", priority = 1 }
needless_raw_strings = { level = "warn", priority = 1 }
panic = { level = "warn", priority = 1 }
partial_pub_fields = { level = "warn", priority = 1 }
print_stderr = { level = "warn", priority = 1 }
print_stdout = { level = "warn", priority = 1 }
pub_without_shorthand = { level = "warn", priority = 1 }
rc_buffer = { level = "warn", priority = 1 }
rc_mutex = { level = "warn", priority = 1 }
redundant_type_annotations = { level = "warn", priority = 1 }
ref_patterns = { level = "warn", priority = 1 }
renamed_function_params = { level = "warn", priority = 1 }
rest_pat_in_fully_bound_structs = { level = "warn", priority = 1 }
semicolon_inside_block = { level = "warn", priority = 1 }
single_char_lifetime_names = { level = "warn", priority = 1 }
std_instead_of_core = { level = "warn", priority = 1 }
str_to_string = { level = "warn", priority = 1 }
string_add = { level = "warn", priority = 1 }
string_slice = { level = "warn", priority = 1 }
string_to_string = { level = "warn", priority = 1 }
suspicious_xor_used_as_pow = { level = "warn", priority = 1 }
tests_outside_test_module = { level = "warn", priority = 1 }
todo = { level = "warn", priority = 1 }
try_err = { level = "warn", priority = 1 }
undocumented_unsafe_blocks = { level = "warn", priority = 1 }
unimplemented = { level = "warn", priority = 1 }
unnecessary_safety_comment = { level = "warn", priority = 1 }
unnecessary_safety_doc = { level = "warn", priority = 1 }
unnecessary_self_imports = { level = "warn", priority = 1 }
unneeded_field_pattern = { level = "warn", priority = 1 }
unseparated_literal_suffix = { level = "warn", priority = 1 }
#unused_result_ok = { level = "warn", priority = 1 }
unwrap_used = { level = "warn", priority = 1 }
use_debug = { level = "warn", priority = 1 }
verbose_file_reads = { level = "warn", priority = 1 }
# Cargo
cargo = "warn"
cargo_common_metadata = { level = "allow", priority = 1 }
