# Foxtive Changelog
Foxtive changelog file 

### 0.26.9 (2026-06-14)
* feat(rabbitmq): export more RabbitMQ types

### 0.26.8 (2026-06-14)
* feat(rabbitmq): add MessagePublisher builder for flexible, composable message publishing
* feat(rabbitmq): support custom headers and metadata in messages for microservices architectures
* feat(rabbitmq): add delayed message publishing with x-delay header support
* feat(rabbitmq): add declare_delayed_exchange for setting up delayed message exchanges
* feat(rabbitmq): builder supports content_type, correlation_id, message_id, and custom properties
* refactor(rabbitmq): move MessagePublisher to separate module for better code organization
* test(rabbitmq): add comprehensive unit tests for MessagePublisher builder pattern
* docs(rabbitmq): add usage examples for builder pattern and delayed messages

### 0.26.7 (2026-04-04)
* fix(zrangebyscore_withscores): adjust to use generic params

### 0.26.6 (2026-04-04)
* feat(redis): add zrangebyscore_withscores method 

### 0.26.5 (2026-04-04)
* feat(redis): add zrange method 

### 0.26.4 (2026-05-19)
* feat(redis): add comprehensive Redis command support with 70+ new methods covering string, hash, list, set, sorted set, key, and server operations
* feat(redis): use redis crate's AsyncCommands trait methods for type-safe API stability instead of raw commands
* feat(redis): add string operations: getset, getrange, setrange, append, incr, decr, set_ex, pset_ex, set_nx, get_del, rename, rename_nx, unlink, strlen
* feat(redis): add hash operations: hget, hmget, hdel, hset, hset_nx, hexists, hkeys, hvals, hgetall, hlen, hincr
* feat(redis): add list operations: llen, lindex, linsert_before, linsert_after, lpush, ltrim, lset
* feat(redis): add set operations: scard, sismember, smembers, srem, srandmember
* feat(redis): add sorted set operations: zcard, zcount, zincr, zscore, zrank, zrem
* feat(redis): add key operations: exists, expire, expire_at, pexpire, persist, ttl, pttl
* feat(redis): add server operations: ping, dbsize
* refactor(redis): ensure API stability by using typed AsyncCommands trait methods to prevent breakage on redis crate updates

### 0.26.3 (2026-05-14)
* feat(rabbitmq): add AppError variant to RmqError for preserving anyhow::Error types
* feat(rabbitmq): add IntoRmqError trait for ergonomic error conversion in consume closures
* feat(rabbitmq): enable bidirectional downcasting between RmqError and anyhow::Error
* fix(rabbitmq): preserve error type information instead of converting to strings
* test(rabbitmq): add tests for error preservation and bidirectional conversion

### 0.26.2 (2026-05-14)
* feat(rabbitmq): enable automatic RmqError to anyhow::Error conversion for seamless interoperability

### 0.26.1 (2026-05-14)
* feat(rabbitmq): add Msg.delivery_tag() to easily extract message delivery tag

### 0.26.0 (2026-05-14)
* feat(rabbitmq): add RmqError enum with 15 detailed error variants for type-safe error handling
* feat(rabbitmq): replace anyhow::Error with RmqResult throughout module
* feat(rabbitmq): add operation timeouts (default 30s) to prevent indefinite blocking
* feat(rabbitmq): add periodic health checks every N messages (default 100)
* feat(rabbitmq): add QoS/prefetch configuration for flow control (default 10)
* feat(rabbitmq): add graceful shutdown via CancellationToken
* fix(rabbitmq): properly handle stream errors and termination to enable auto-reconnection
* fix(rabbitmq): cap exponential backoff at 60s to prevent excessive reconnection delays
* fix(rabbitmq): remove silent error swallowing in NACK operations
* test(rabbitmq): add 19 comprehensive unit tests covering error types and configuration
* refactor(rabbitmq): improve code comments for better readability

### 0.25.6 (2026-04-22)
* feat(foxtive): added .tera() method to return Tera templating engine

### 0.25.5 (2026-03-21)
* fix(template): .render now accepts Into<String> & &Context

### 0.25.4 (2026-03-14)
* Added optional `openapi` feature flag enabling `IntoParams` derivation for `QueryParams`

### 0.25.3 (2026-03-14)
* Added optional `openapi` feature flag enabling `ToSchema` derivation for `QueryParams`

### 0.25.2 (2026-03-12)
* feat(regex): add Digits, AlphaNumericLoose, and Email variants to RegexType
* refactor(regex): update TextCleaner and Tester to support new regex variants
* docs(trace): add documentation for tracing configuration
* docs(state): add documentation for FoxtiveState
* fix(app_result): provide a default error message for NotFound

### 0.25.1 (2026-03-11)
* fix(macros): error macros should use local Error instance of referencing anyhow's

### 0.25.0 (2026-03-11)
* refactor(AppMessage): renamed Warning variant to Invalid 
* feat(AppMessage): added Conflict, UnprocessableEntity, ValidationError variants
* feat(AppMessage): added .kind_name() method
* feat(AppMessage): added macros: not_found, unauthorized, forbidden, bad_request, invalid, conflict, unprocessable_entity, internal_server_error, validation_error, ensure, ensure_found

### 0.24.0 (2026-03-10)
* refactor(AppMessage): redundancy by merging variants like SuccessMessage and SuccessMessageString, clarify variant names, use more specific error types, and simplify the message method. I'll begin by merging the redundant variants in the enum definition.
* feat(AppMessage): add static constructor methods for each AppMessage enum variant that accepts impl Into<String> for its string arguments. This will simplify the creation of AppMessage instances.
* perf(AppMessage): use Cow<str> instead of String where necessary

### 0.23.1 (2026-03-03)
* fix(tokio): use a dedicated runtime for run_async

### 0.23.0 (2026-02-26)
* fix(tokio): create a dedicated runtime for run_async to avoid blocking the loop

### 0.22.3 (2026-02-18)
* fix(pagination): use generic function param instead of an fn pointer

### 0.22.2 (2026-02-12)
* feat(numbers): add 'human_readable_int' to format and add `format_currency` & `format_integer` as aliases

### 0.22.1 (2026-02-06)
* refactor(block): now enforces returning AppResult<T>

### 0.22.0 (2026-02-05)
* feat(helpers): add intelligent block helper for spawn_blocking

### 0.20.0 (2026-01-15)
* feat(http): add start_datetime & end_datetime to query params
* bump(crates): to latest versions

### 0.19.5 (2025-10-31)
* feat(global-state): add is_initialized method and document methods

### 0.19.4 (2025-10-25)
* feat(serde_json): add serialization/deserialization helper methods

### 0.19.3 (2025-10-25)
* feat(serde_json): add serialization/deserialization helper methods
* bump(jsonwebtoken): to version 10.1.0

### 0.19.2 (2025-10-17)
* fix(hmac): resolved deprecation notices
* bump(redis+lapin): to latest safe versions

### 0.19.1 (2025-10-03)
* feat(run_async): added helper func to run async future and in blocking context and return result

### 0.19.0 (2025-10-03)
* bump(jsonwebtoken): to version 10.0.0

### 0.18.5 (2025-09-27)
* fix(QueryParams): impl Serialize

### 0.18.4 (2025-09-21)
* feat(regex): add AlphaNumericSpace to RegexType

### 0.18.3 (2025-09-17)
* fix(in-memory-cache): it requires regex feature to work

### 0.18.2 (2025-09-17)
* feat(template): re-export tera Context as TemplateContext

### 0.18.1 (2025-09-16)
* bump(diesel): to version 2.3.1

### 0.18.0 (2025-09-11)
* refactor(http): move to base lib level
* feat(status-code): re-export StatusCode for use in conjunction with AppMessage

### 0.17.1 (2025-08-24)
* feat(http): add http query param parser, gated by "http" feature

### 0.17.0 (2025-08-14)
* refactor(regex): renamed "Regex" to "Tester"
* feat(TextCleaner): add helper to use Tester-style methods to clen-up text

### 0.16.0 (2025-08-14)
* feat(app): avoid panic & log more debug ingo

### 0.15.2 (2025-08-07)
* feat(trace): add .with_level(lvl) method

### 0.15.1 (2025-08-06)
* feat(trace): impl FromStr for OutputFormat

### 0.15.0 (2025-08-06)
* refactor(logger): renamed module to "trace"
* bump(tokio): to version 1.47.1
* bump(fancy-regex): to version 0.16.1

### 0.14.0 (2025-06-19)
* refactor(logger): renamed module to "trace"
* bump(tokio): to version 1.47.1
* bump(fancy-regex): to version 0.16.1

### 0.14.0 (2025-06-19)
* feat(env): optionally use tracing logger for more advance logging capabilities
* bump(rust-argon2): to version 3.0
* feat(environment): specify app env

### 0.13.2 (2025-06-14)
* fix(file-ext): return ext without a dot (return "txt" instead of ".txt")
* bump(crates): to latest minor versions

### 0.13.1 (2025-06-12)
* feat(file-size): convenient methods for file size formatting
* bump(crates): to latest minor versions

### 0.13.0 (2025-06-05)
* bump(crates): redis, lapin & fancy-regex to their latest respective versions
* feat(file-ext): add file ext helper, this helper provides a convenient way to handle file ext easily
* feat(sanitizer): file name & HTML sanitizer, HTML sanitizer is gated by `html-sanitizier` feature

### 0.12.0 (2025-06-05)
* bump(edition): to 2024

### 0.11.0 (2025-06-05)
* bump(crates): to latest versions
* feat(env): add new AppMessage::MissingEnvironmentVariable(String, VarError)

### 0.10.0 (2025-05-23)
* feat(templating): BREAKING (expose template dir config)
* feat(rabbitmq): BREAKING (expose dsn & max pool size config)
* feat(redis): BREAKING (expose dsn & max pool size config)
* feat(database): BREAKING (expose dsn & max pool size config)

### 0.9.0 (2025-05-22)
* feat(cache): added 'forget_by_pattern' method to forget keys using pattern
* fix(templating): render now returns result instead of panicking
* feat(cache): added 'keys' and 'keys_by_pattern' methods

### 0.8.4 (2025-05-01)
* fix(serde_de_datetime): parse as string instead of &str

### 0.8.3 (2025-04-30)
* feat(string): extension trait to provide helper methods
* fix(reqwest): removed 'into_code()' & 'into_body()' and add 'into_parts()'

### 0.8.2 (2025-04-30)
* feat(reqwest): remove unnecessary result

### 0.8.1 (2025-04-30)
* feat(reqwest): error helper now has 'into_code()' & 'into_body()' to move the values out

### 0.8.0 (2025-04-20)
* feat(in-memory-cache): now support in memory driver using DashMap as an underlying storage

### 0.7.2 (2025-04-20)
* feat(hmac): constructor now accepts hashing function

### 0.7.1 (2025-04-20)
* fix(caching): drop the 'cache' feature

### 0.7.0 (2025-04-20)
* fix(redis): now accepts a value that accepts ToRedisArgs to avoid auto-serializing values
* docs(password): basic usage docs
* feat(string): add more utility funcs
* docs(hmac): basic usage docs
* refactor(hmac): support usage of multiple hash functions
* docs(base64): basic usage docs
* refactor(cache): introducing driver mechanism

### 0.6.5 (2025-04-02)
* feat(app-result): 'recover_from_async' to recover error from Error or AppResult<T>

### 0.6.4 (2025-03-31)
* feat(app-message): add 'is_success()', 'is_error()' & 'log()'

### 0.6.3 (2025-03-23)
* feat(pagination-result): added PaginationResultExt trait to provide .map_page_data()

### 0.6.2 (2025-03-22)
* fix(app-message): redirect status code is 302
* test(app-message): cover some cases
* feat(app-error): add AppErrorExt to provide .message() on error object

### 0.6.1 (2025-03-17)
* fix(app-message): .message() should return error message
* feat(workflow): tag version after release

### 0.6.0
* feat(app-message): impl Clone
* fix(crates): remove unused features

### 0.5.1
* fix(app-message): map other variants with status code

### 0.5.0
* feat(app-result): 'recover_from' to recover error from AppResult<T>

### 0.4.1
* added `AppResult<T>.map_app_msg(|m| m)`

### 0.4.0
* added database shareable ext
* move database traits to 'ext' folder
* impl From<crate::Error> for AppMessage 