[package] name = "confab" version = "0.3.1" edition = "2021" rust-version = "1.70" description = "Asynchronous line-oriented interactive TCP client" authors = ["John Thorvald Wodder II "] repository = "https://github.com/jwodder/confab" documentation = "https://github.com/jwodder/confab" license = "MIT" keywords = ["tcp", "client", "chat"] categories = ["command-line-utilities", "network-programming"] exclude = ["/.*"] [dependencies] anyhow = "1.0.75" async-stream = "0.3.5" bytes = "1.5.0" cfg-if = "1.0.0" clap = { version = "4.4.10", default-features = false, features = ["derive", "error-context", "help", "std", "suggestions", "usage", "wrap_help"] } crossterm = "0.27.0" futures-util = { version = "0.3.29", default-features = false, features = ["sink"] } itertools = "0.12.0" openssl = { version = "0.10.60", optional = true } pin-project-lite = "0.2.13" rustls-native-certs = { version = "0.7.0", optional = true } rustls-pki-types = { version = "1.0.1", optional = true } rustyline-async = "0.4.1" thiserror = "1.0.50" time = { version = "0.3.30", default-features = false, features = ["std", "local-offset", "macros", "formatting"] } tokio = { version = "1.35.0", features = ["fs", "io-util", "macros", "net", "rt", "time"] } tokio-native-tls = { version = "0.3.1", optional = true } tokio-rustls = { version = "0.25.0", optional = true } tokio-util = { version = "0.7.10", features = ["codec"] } unicode-general-category = "0.6.0" [dev-dependencies] assert_matches = "1.5.0" expectrl = { version = "0.7.1", features = ["async"] } regex = "1.8.1" rstest = { version = "0.18.2", default-features = false } serde = { version = "1.0.193", features = ["derive"] } serde-jsonlines = "0.5.0" serde_json = "1.0.108" tempfile = "3.8.1" time = { version = "0.3.30", default-features = false, features = ["serde", "parsing"] } tokio = { version = "1.35.0", features = ["sync"] } tokio-stream = { version = "0.1.14", features = ["time"] } [build-dependencies] anyhow = "1.0.75" cargo_metadata = "0.18.1" semver = "1.0.20" time = { version = "0.3.30", default-features = false, features = ["std", "formatting"] } [features] default = ["rustls"] rustls = ["dep:tokio-rustls", "dep:rustls-native-certs", "dep:rustls-pki-types"] native = ["dep:tokio-native-tls"] vendored-openssl = ["native", "openssl/vendored"] [profile.release] lto = true strip = true [profile.dist] inherits = "release" [workspace.metadata.dist] cargo-dist-version = "0.4.2" ci = ["github"] include = ["THIRDPARTY.toml", "doc/confab.1"] installers = ["shell", "powershell"] pr-run-mode = "upload" rust-toolchain-version = "stable" targets = ["x86_64-unknown-linux-gnu", "aarch64-apple-darwin", "x86_64-apple-darwin", "x86_64-unknown-linux-musl", "x86_64-pc-windows-msvc"] [lints.rust] # Lint groups: future_incompatible = "deny" rust_2018_idioms = "deny" unused = { level = "deny", priority = 0 } # Set a lint in "unused" back to "warn" (to be denied again under CI): dead_code = { level = "warn", priority = 5 } # Deny various allow-by-default lints: macro_use_extern_crate = "deny" missing_debug_implementations = "deny" pointer_structural_match = "deny" single_use_lifetimes = "deny" trivial_casts = "deny" unreachable_pub = "deny" unsafe_code = "deny" unsafe_op_in_unsafe_fn = "deny" unused_import_braces = "deny" unused_lifetimes = "deny" unused_qualifications = "deny" unused_tuple_struct_fields = "deny" # Deny various warn-by-default lints: ambiguous_glob_reexports = "deny" bad_asm_style = "deny" break_with_label_and_loop = "deny" clashing_extern_declarations = "deny" confusable_idents = "deny" const_item_mutation = "deny" deprecated = "deny" deprecated_where_clause_location = "deny" deref_nullptr = "deny" drop_bounds = "deny" dropping_copy_types = "deny" dropping_references = "deny" duplicate_macro_attributes = "deny" dyn_drop = "deny" exported_private_dependencies = "deny" for_loops_over_fallibles = "deny" forgetting_copy_types = "deny" forgetting_references = "deny" function_item_references = "deny" hidden_glob_reexports = "deny" improper_ctypes = "deny" improper_ctypes_definitions = "deny" inline_no_sanitize = "deny" internal_features = "deny" invalid_from_utf8 = "deny" invalid_macro_export_arguments = "deny" invalid_nan_comparisons = "deny" invalid_value = "deny" irrefutable_let_patterns = "deny" mixed_script_confusables = "deny" named_arguments_used_positionally = "deny" no_mangle_generic_items = "deny" non_fmt_panics = "deny" non_shorthand_field_patterns = "deny" noop_method_call = "deny" opaque_hidden_inferred_bound = "deny" overlapping_range_endpoints = "deny" private_bounds = "deny" private_interfaces = "deny" refining_impl_trait = "deny" renamed_and_removed_lints = "deny" special_module_name = "deny" stable_features = "deny" suspicious_double_ref_op = "deny" temporary_cstring_as_ptr = "deny" trivial_bounds = "deny" type_alias_bounds = "deny" unconditional_recursion = "deny" undefined_naked_function_abi = "deny" ungated_async_fn_track_caller = "deny" unknown_lints = "deny" unused_associated_type_bounds = "deny" unused_comparisons = "deny" useless_ptr_null_checks = "deny" while_true = "deny" [lints.clippy] # Deny all warn-by-default lints: all = "deny" # Warn on various allow-by-default lints (denied under CI): dbg_macro = "warn" todo = "warn" unimplemented = "warn" # Deny various allow-by-default lints: as_underscore = "deny" bool_to_int_with_if = "deny" borrow_as_ptr = "deny" cast_possible_truncation = "deny" cast_possible_wrap = "deny" cast_precision_loss = "deny" cast_ptr_alignment = "deny" cast_sign_loss = "deny" checked_conversions = "deny" clear_with_drain = "deny" cloned_instead_of_copied = "deny" collection_is_never_read = "deny" copy_iterator = "deny" debug_assert_with_mut_call = "deny" default_trait_access = "deny" derive_partial_eq_without_eq = "deny" doc_link_with_quotes = "deny" doc_markdown = "deny" empty_line_after_doc_comments = "deny" empty_line_after_outer_attr = "deny" empty_structs_with_brackets = "deny" equatable_if_let = "deny" exit = "deny" explicit_into_iter_loop = "deny" explicit_iter_loop = "deny" filter_map_next = "deny" flat_map_option = "deny" float_cmp = "deny" float_cmp_const = "deny" fn_to_numeric_cast_any = "deny" format_push_string = "deny" future_not_send = "deny" get_unwrap = "deny" if_then_some_else_none = "deny" ignored_unit_patterns = "deny" impl_trait_in_params = "deny" implicit_clone = "deny" implied_bounds_in_impls = "deny" imprecise_flops = "deny" index_refutable_slice = "deny" invalid_upcast_comparisons = "deny" items_after_statements = "deny" iter_not_returning_iterator = "deny" iter_with_drain = "deny" large_futures = "deny" large_types_passed_by_value = "deny" linkedlist = "deny" lossy_float_literal = "deny" manual_assert = "deny" manual_clamp = "deny" manual_instant_elapsed = "deny" manual_let_else = "deny" manual_ok_or = "deny" manual_string_new = "deny" map_unwrap_or = "deny" match_bool = "deny" match_wild_err_arm = "deny" mem_forget = "deny" mismatching_type_param_order = "deny" missing_assert_message = "deny" missing_asserts_for_indexing = "deny" missing_panics_doc = "deny" missing_safety_doc = "deny" mixed_read_write_in_expression = "deny" mut_mut = "deny" needless_bitwise_bool = "deny" needless_collect = "deny" needless_for_each = "deny" needless_pass_by_ref_mut = "deny" needless_raw_string_hashes = "deny" needless_raw_strings = "deny" negative_feature_names = "deny" or_fun_call = "deny" path_buf_push_overwrite = "deny" pub_without_shorthand = "deny" range_minus_one = "deny" range_plus_one = "deny" rc_buffer = "deny" rc_mutex = "deny" read_zero_byte_vec = "deny" readonly_write_lock = "deny" redundant_clone = "deny" redundant_closure_for_method_calls = "deny" redundant_feature_names = "deny" ref_binding_to_reference = "deny" rest_pat_in_fully_bound_structs = "deny" same_functions_in_if_condition = "deny" semicolon_if_nothing_returned = "deny" should_panic_without_expect = "deny" single_match_else = "deny" stable_sort_primitive = "deny" string_add_assign = "deny" string_lit_as_bytes = "deny" string_lit_chars_any = "deny" string_to_string = "deny" suboptimal_flops = "deny" trailing_empty_array = "deny" trait_duplication_in_bounds = "deny" trivial_regex = "deny" try_err = "deny" type_repetition_in_bounds = "deny" unchecked_duration_subtraction = "deny" undocumented_unsafe_blocks = "deny" unicode_not_nfc = "deny" uninlined_format_args = "deny" unnecessary_join = "deny" unnecessary_safety_comment = "deny" unnecessary_safety_doc = "deny" unnecessary_self_imports = "deny" unnecessary_struct_initialization = "deny" unnecessary_wraps = "deny" unneeded_field_pattern = "deny" unnested_or_patterns = "deny" unused_async = "deny" unused_peekable = "deny" unused_rounding = "deny" unwrap_used = "deny" used_underscore_binding = "deny" wildcard_dependencies = "deny" zero_sized_map_values = "deny"