# ----------------------------------------------------------------------------- # LangWeave - A Rust library for seamless internationalization (i18n) and localization. # ----------------------------------------------------------------------------- [package] # General project metadata name = "langweave" # The name of the library version = "0.0.1" # Initial version of the crate authors = ["LangWeave Contributors"] # Library contributors edition = "2021" # Rust edition being used rust-version = "1.56.0" # Minimum supported Rust version license = "MIT OR Apache-2.0" # Dual licensing strategy description = """ A Rust library for seamless internationalization (i18n) and localization. """ # Short library description homepage = "https://langweave.com/" # Project's homepage URL documentation = "https://langweave.com/documentation/index.html" # Doc URL repository = "https://github.com/sebastienrousseau/langweave" # Repository URL readme = "README.md" # Path to the readme file build = "build.rs" # Path to the build script # ----------------------------------------------------------------------------- # Crate Configuration # ----------------------------------------------------------------------------- # Crates.io categories categories = [ "data-structures", "parsing", "encoding", "web-programming", "development-tools" ] # Keywords for easier discoverability on Crates.io keywords = ["langweave", "generator", "site", "ssg", "static"] # Including necessary files in the package include = [ "src/**/*", "Cargo.toml", "locales/**/*", ] # Excluding unnecessary files from the package exclude = [ "/.git/*", # Exclude version control files "/.github/*", # Exclude GitHub workflows "/.gitignore", # Ignore Git ignore file "/.vscode/*" # Ignore VSCode settings ] # ----------------------------------------------------------------------------- # Library Information # ----------------------------------------------------------------------------- [lib] # Library-specific settings name = "langweave" # Internal name of the library path = "src/lib.rs" # Path to the library entry point # ----------------------------------------------------------------------------- # Features # ----------------------------------------------------------------------------- [features] # Optional features that can be enabled or disabled. default = [] # No default features enabled async = [] # Placeholder for future asynchronous feature support # ----------------------------------------------------------------------------- # Build Dependencies # ----------------------------------------------------------------------------- [build-dependencies] # Dependencies for the build script, used for pre-compilation tasks. version_check = "0.9" # Ensures that a compatible Rust version is used # ----------------------------------------------------------------------------- # Development Dependencies # ----------------------------------------------------------------------------- [dev-dependencies] # Dependencies required for testing and development. assert_fs = "1.0" # Filesystem assertions for testing criterion = "0.5" # Benchmarking library to test performance predicates = "3.0" # Filesystem predicates for testing tempfile = "3.2" # Temporary file creation for testing [dependencies] # Dependencies required for building and running the project. async-trait = "0.1" thiserror = "1.0" anyhow = "1.0.90" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" log = "0.4" env_logger = "0.11" lazy_static = "1.4" once_cell = "1.20" regex = "1.5" smallvec = "1.13" tokio = { version = "1.0", features = ["full"] } whatlang = "0.16" # ----------------------------------------------------------------------------- # Examples # ----------------------------------------------------------------------------- [[example]] # Example code demonstrating the basic usage of the library. name = "basic_usage_example" # Name of the example path = "examples/basic_usage_example.rs" # Path to the example code [[example]] # Example code demonstrating the error handling in the library. name = "error_example" # Name of the example path = "examples/error_example.rs" # Path to the example code [[example]] # Example code demonstrating all the library features. name = "full_example" # Name of the example path = "examples/full_example.rs" # Path to the example code [[example]] # Example code demonstrating the language detection examples. name = "language_detector_example" # Name of the example path = "examples/language_detector_example.rs" # Path to the example code [[example]] # Example code demonstrating the language detection trait examples. name = "language_detector_trait_example" # Name of the example path = "examples/language_detector_trait_example.rs" # Path to the example code [[example]] # Example code demonstrating the library usage. name = "lib_example" # Name of the example path = "examples/lib_example.rs" # Path to the example code [[example]] # Example code demonstrating the translation examples. name = "translations_example" # Name of the example path = "examples/translations_example.rs" # Path to the example code [[example]] # Example code demonstrating the translator examples. name = "translator_example" # Name of the example path = "examples/translator_example.rs" # Path to the example code # ----------------------------------------------------------------------------- # Criterion Benchmark # ----------------------------------------------------------------------------- [[bench]] # Benchmarking configuration for performance testing. name = "translation_benchmark" # Name of the benchmark harness = false # Disable the default benchmark harness (used by Criterion) # ----------------------------------------------------------------------------- # Documentation Configuration # ----------------------------------------------------------------------------- [package.metadata.docs.rs] # Settings for building and hosting documentation on docs.rs. all-features = true # Build documentation with all features enabled rustdoc-args = ["--cfg", "docsrs"] # Arguments passed to `rustdoc` when building the documentation targets = ["x86_64-unknown-linux-gnu"] # Default target platform for the docs # ----------------------------------------------------------------------------- # Linting Configuration # ----------------------------------------------------------------------------- [lints.rust] # Linting rules for the project. ## Warnings missing_copy_implementations = "warn" # Warn if types can implement `Copy` but don’t missing_docs = "warn" # Warn if public items lack documentation unstable_features = "warn" # Warn on the usage of unstable features unused_extern_crates = "warn" # Warn about unused external crates unused_results = "warn" # Warn if a result type is unused (e.g., errors ignored) ## Allowances bare_trait_objects = "allow" # Allow bare trait objects (e.g., `Box`) elided_lifetimes_in_paths = "allow" # Allow lifetimes to be elided in paths non_camel_case_types = "allow" # Allow non-camel-case types non_upper_case_globals = "allow" # Allow non-uppercase global variables trivial_bounds = "allow" # Allow trivial bounds in trait definitions unsafe_code = "allow" # Allow the usage of unsafe code blocks ## Forbidden missing_debug_implementations = "forbid" # Forbid missing `Debug` implementations non_ascii_idents = "forbid" # Forbid non-ASCII identifiers unreachable_pub = "forbid" # Forbid unreachable `pub` items ## Denials dead_code = "deny" # Deny unused, dead code in the project deprecated_in_future = "deny" # Deny code that will be deprecated in the future ellipsis_inclusive_range_patterns = "deny" # Deny usage of inclusive ranges in match patterns (`...`) explicit_outlives_requirements = "deny" # Deny unnecessary lifetime outlives requirements future_incompatible = { level = "deny", priority = -1 } # Handle future compatibility issues keyword_idents = { level = "deny", priority = -1 } # Deny usage of keywords as identifiers macro_use_extern_crate = "deny" # Deny macro use of `extern crate` meta_variable_misuse = "deny" # Deny misuse of meta variables in macros missing_fragment_specifier = "deny" # Deny missing fragment specifiers in macros noop_method_call = "deny" # Deny method calls that have no effect rust_2018_idioms = { level = "deny", priority = -1 } # Enforce Rust 2018 idioms rust_2021_compatibility = { level = "deny", priority = -1 } # Enforce Rust 2021 compatibility single_use_lifetimes = "deny" # Deny lifetimes that are used only once trivial_casts = "deny" # Deny trivial casts (e.g., `as` when unnecessary) trivial_numeric_casts = "deny" # Deny trivial numeric casts (e.g., `i32` to `i64`) unused = { level = "deny", priority = -1 } # Deny unused code, variables, etc. unused_features = "deny" # Deny unused features unused_import_braces = "deny" # Deny unnecessary braces around imports unused_labels = "deny" # Deny unused labels in loops unused_lifetimes = "deny" # Deny unused lifetimes unused_macro_rules = "deny" # Deny unused macros unused_qualifications = "deny" # Deny unnecessary type qualifications variant_size_differences = "deny" # Deny enum variants with significant size differences # ----------------------------------------------------------------------------- # Clippy Configuration # ----------------------------------------------------------------------------- [package.metadata.clippy] # Clippy lint configuration for enhanced code analysis. warn-lints = [ "clippy::all", # Enable all common Clippy lints "clippy::pedantic", # Enable pedantic lints for stricter checking "clippy::cargo", # Enable lints specific to cargo "clippy::nursery", # Enable experimental lints from Clippy’s nursery "clippy::complexity", # Warn on code complexity and suggest improvements "clippy::correctness", # Ensure code correctness, flagging potential issues "clippy::perf", # Lints that catch performance issues "clippy::style", # Suggest stylistic improvements "clippy::suspicious", # Detect suspicious code patterns "clippy::module_name_repetitions", # Avoid repeating module names in the crate name ] # Customize Clippy to allow certain less critical lints. allow-lints = [ "clippy::module_inception", # Allow modules with the same name as their parents "clippy::too_many_arguments", # Allow functions with more than 7 arguments if justified "clippy::missing_docs_in_private_items", # Skip requiring documentation for private items ] # Enforce specific warnings and errors more strictly. deny-lints = [ "clippy::unwrap_used", # Deny the use of unwrap to ensure error handling "clippy::expect_used", # Deny the use of expect to avoid improper error handling ] # ----------------------------------------------------------------------------- # Profiles # ----------------------------------------------------------------------------- [profile.dev] # Development profile configuration for fast builds and debugging. codegen-units = 256 # Increase codegen units for faster compilation debug = true # Enable debugging symbols debug-assertions = true # Enable debug assertions incremental = true # Enable incremental compilation lto = false # Disable link-time optimization for development opt-level = 0 # No optimizations in development overflow-checks = true # Enable overflow checks for arithmetic operations panic = 'unwind' # Enable unwinding for panics (useful in development) rpath = false # Disable rpath generation strip = false # Do not strip symbols in development builds [profile.release] # Release profile configuration for optimized builds. codegen-units = 1 # Reduce codegen units for better performance debug = false # Disable debug symbols in release builds debug-assertions = false # Disable debug assertions incremental = false # Disable incremental compilation for optimal binary size lto = true # Enable link-time optimization for smaller and faster binaries opt-level = "z" # Optimize for binary size overflow-checks = false # Disable overflow checks for performance panic = "abort" # Use abort on panic for minimal overhead rpath = false # Disable rpath generation strip = "symbols" # Strip symbols for smaller binary size [profile.test] # Test profile configuration for debugging and development. codegen-units = 256 # Increase codegen units for faster test builds debug = true # Enable debugging symbols for test builds debug-assertions = true # Enable debug assertions for tests incremental = true # Enable incremental compilation for tests lto = false # Disable link-time optimization during testing opt-level = 0 # No optimizations in test builds overflow-checks = true # Enable overflow checks for tests rpath = false # Disable rpath generation strip = false # Do not strip symbols in test builds