- Changelog
- v0.2.1 - 2025-06-28
- v0.2.0 - 2025-06-27
- v0.2.0-beta.1 - 2025-06-16
- v0.1.19 - 2025-06-06
- v0.1.18 - 2025-06-06
- v0.1.17 - 2025-06-01
- v0.1.16 - 2025-04-30
- v0.1.15 - 2025-04-23
- v0.1.14 - 2025-04-19
- v0.1.13 - 2025-04-18
- v0.1.12 - 2025-03-21
- v0.1.11 - 2025-03-21
- fieldx-v0.1.10 - 2025-02-22
- fieldx-v0.1.9 - 2025-01-16
- fieldx-v0.1.8 - 2024-12-05
- fieldx-v0.1.7 - 2024-11-22
- fieldx-v0.1.6 - 2024-10-19
- fieldx-v0.1.5 - 2024-10-03
- fieldx-v0.1.3 - 2024-08-02
- fieldx-v0.1.2 - 2024-06-19
- fieldx-v0.1.1 - 2024-06-02
- v0.1.0 - 2024-05-31
Changelog
v0.2.1 - 2025-06-28
Documentation
- Fix errors in the documentation
- Add the Further Reading section to the main page/README
- Give each workspace member its own README
Maintenance
- Add homepage to the cargo manifests
- Add dry run info to the publish question to user
- Try to only use specific publish feature set for fieldx package
v0.2.0 - 2025-06-27
Features
-
Allow optional alternative async-lock instead of tokio
It’s been long planned to relax the crate’s dependency on
tokio
. You can now use theasync-lock
crate to implementRwLock
andOnceCell
. This change also updates the feature flags: theasync
feature must be paired with eithertokio-backend
orasync-lock-backend
. Alternatively, enable async support and select an implementation in one step with the umbrella flagsasync-tokio
orasync-lock
.tokio
remains in the requirements for tests. -
Add support for
clonable-lock
feature flagWith this flag,
FXRwLock<T>
types from eithersync
orasync
modules will be used instead ofRwLock<T>
fromparking_lot
,tokio
, orasync-lock
crates.
Bug Fixes
-
Don't use unsound mapped rwlock guards
Replace them with FXProxyReadGuard and FXProxyWriteGuard wrappers.
-
Builder's
prefix
must be struct level only sub-argument -
prefix
was disrespected for field builder method name -
Build Docker image for nightly Rust
-
Sync mode is not set for a field when
lock
is used
Refactor
-
️‼️ breaking Get rid of Sync/Async suffixes in type names where possible
Use namespaces to address the types. I.e.
sync::FXProxy
,- ⚠️ The last breaking change before the 0.2.0 release.
Documentation
- Release the 'FieldX Object Manager' book
Testing
-
Add some test descriptions
-
Update compilation tests for changes in feature flags and MSRV
-
Implement parallelized testing with Docker
cargo make
targetstest-versions
andupdate-versions
are rather heavy both runtime- and space-wise. Now each version of Rust toolchain we test for will be tests in its own Docker container and all versions will be run in parallel. -
Add examples to the testing
-
Better support for containerization of update-versions target
Maintenance
- Bump MSRV to 1.78
- Another attempt to fix error reporting in the Makefile.toml
- Skip compilation tests for nightly at the earliest possible stage
v0.2.0-beta.1 - 2025-06-16
Documentation
- Reflect some of the previous versions changes
Testing
- Propagate reace condition fix from sync.rs test to sync_generics.rs
v0.1.19 - 2025-06-06
Bug Fixes
-
Quick fix for an overlooked case with fallible
The
fallible
argument makes sense when used withlazy
, which can now be used with bothlock
andinner_mut
. However, the combination offallible
with these two was unconditionally prohibited. -
Take care of new warnings from the nightly compiler
-
One more location where the new lifetime warning springs up
v0.1.18 - 2025-06-06
Features
-
️‼️ breaking Getter is not give by default only with the
lazy
attribute- ⚠️ The reasons why getter was given with
clearer
,predicate
, andinner_mut
are now less clear than they used to be. There is a good reason to get it withlazy
: unless it combined withlock
, the only way get lazy initialization is to use the getter.
- ⚠️ The reasons why getter was given with
-
Implement simplified
lazy
implementation for non-lock fieldsIt is not always necessary to lock-protect lazy fields; this is especially true for read-only ones. Therefore, unless the
lazy
attribute is accompanied by thelock
orinner_mut
attributes (which are just aliases in thesync
andasync
modes), lazy evaluation will be implemented usingOnceCell
from eitheronce_cell
ortokio
for thesync
andasync
contexts, respectively.
Bug Fixes
get(as_ref)
wasn't respected forsync
fields- Add now required
get
attribute
Refactor
- Move plain-related decls into fieldx::plain module
Documentation
- Fix an autocompletion error
- Add notes on
lazy
enabling the accessor methods
v0.1.17 - 2025-06-01
Features
-
Make vast parts of fieldx_derive reusable via fieldx_core crate
-
Add support for associated types to
FXImplConstructor
-
Make doc_props macro public
-
Implement ToTokens trait for some key types
-
Allow keyword args to also accept a
foo()
syntaxPreviously, this syntax triggered 'expected ...' errors. While it worked for manually written code, it failed for token streams produced by the same types when wrapped in
FXNestingAttr
, because their keyword forms generated the aforementioned function-call-like syntax. -
Implement FXSetState trait for FXProp
This allowed cleaning up some trait implementations. So, where previously
a_prop.into()
was used, it is nowa_prop.is_set()
. -
Implement
to_arg_tokens
method for FXFieldReceiver
Bug Fixes
-
Clarify the use of reference counted self
Don't perform extra checks on the validity of the weak self-reference unless necessary, and call
post_build
on the object itself rather than on its reference-counting container. -
Incorrect code generation for async locks
Refactor
-
Make the codegen context generic over implementation details
Now what is related to the particular code generation is available via the
impl_ctx
field and corresponding method.
v0.1.16 - 2025-04-30
Features
-
Improve functionality of FXSynTuple
Allow it to take a wider range of Parse-implementing types.
Bug Fixes
- Add missing FXSetState impl for FXSynTuple and FXPunctuated
- Silence clippy warnings about introduced type complexity
- Silence some more clippy lints
Refactor
- Remove redundant delegations
- Stop returning a reference by field receiver
span
method
Testing
- Complete unfinished tests
v0.1.15 - 2025-04-23
Features
-
Add support for explicit builder Default trait implementation
The builder type implements the Default trait by default. If this behavior is undesired, use
builder(default(off))
instead.
Bug Fixes
- Unrequested
Default
impl whenserde
feature is enabled
Maintenance
- Make clippy happy with its defaults
v0.1.14 - 2025-04-19
Bug Fixes
- Fix a regression that broke compatibility with fieldx_plus crate
v0.1.13 - 2025-04-18
Features
-
Allow accessor mode flags to take the
off
subargumentThis allows to override struct-level defaults for
copy
,clone
, andas_ref
flags. -
Don't require
lock
field types to implement Default -
Introduce
new
helper and deprecateno_new
This also uncouples
new
fromdefault
, allowing for use of theDrop
trait withfieldx
structs.
Bug Fixes
-
An old bug in the
sync
test -
myself
method in post_build of ref-counted structsPreviously,
post_build
was invoked on reference-counted objects before they were wrapped inRc
orArc
. This led to the failure of themyself
method because the weak reference to self remained uninitialized. -
Superfluous warning on unused builder methods
Mark field builder methods as
#[allow(unused)]
if corresponding fields are optional or have alternative sources of values (such as lazy initialization or default values). -
Regression that broke non-debug build profiles
-
Compiler error message location for post_build methods
Documentation
- Fix CHANGELOG template
- Document the
new
helper argument
Testing
-
Remove laziness from attribute to make test working again
Builder methods of lazy fields are now marked with
#[allow(unused)]
to avoid unused warnings.
️ Miscellaneous Tasks
- Don't include release commit message in changelog
v0.1.12 - 2025-03-21
Bug Fixes
- Missing
documentation
key in crates metadata
️ Miscellaneous Tasks
- Release fieldx version 0.1.12
v0.1.11 - 2025-03-21
Features
-
Generate errors for useless sub-arguments
-
Add
doc
argument to document generated codeAnd preserve field doc comments for accessors and builder setters.
-
Restrict use of more subargs at field level
This feature came along with refactoring aiming at unification of internal interfaces.
Bug Fixes
-
Clearer treating a field as a lock on
sync
structureThis shouldn't happen without explicit
lock
being set. This is a bug inherited from the times whenoptional
on async
struct was implying thelock
argument. -
Incorrect hanlding of sync+optional by serialization
-
Option
span not updated from FXNestingAttr wrapper -
Recover lost functionality of prefixing builder setter methods
While it was the right move to change the functionality of the
builder
argument's literal sub-argument to define the builder's struct name, the ability to bulk-assign prefixes to builder setter names was lost. It is now recovered by introducing theprefix
sub-argument to thebuilder
argument.
Refactor
-
️‼️ breaking Improve how generated code is bound to the source
With this commit the following breaking changes are introduced:
- ⚠️
public
argument is gone, usevis(...)
instead - ⚠️ struct-level
serde
literal string argument is now used asrename
argument of#[serde()]
attribute. - ⚠️
optional
is not implyinglock
forsync
structs anymore. Explitcitlock
argument may be required.
- ⚠️
-
Major step towards constructor-based architecture
No extra features added, just refactoring the codebase to make it more maintainable and extensible. If no big bugs are found, then this release could serve as a stabilization prior to the v0.2.0 release.
Documentation
- Document the latest changes and fix some errors
️ Miscellaneous Tasks
- Release fieldx version 0.1.11
fieldx-v0.1.10 - 2025-02-22
Features
- Allow
default
to take expressions as arguments
Bug Fixes
- Insufficiently strict handling of 'skip'
- Lazy fields picking up
optional
from struct level
fieldx-v0.1.9 - 2025-01-16
Features
- Allow inner_mut to be used in sync mode
- Allow wider use of inner_mut
Bug Fixes
- Remove erroneous
documentation
field fromCargo.toml
- Builder methods visibility must not always be public
- Regression, parking_lot types must be re-exported
- Incorrect codegen for const generic params with default
- Generics for serde shadow struct
- Incorrect generation of serde shadow Default implementation
- Incorrect generic handling in Self fixup
- Sanitize the logic for choosing field concurrency mode
fieldx-v0.1.8 - 2024-12-05
Features
- Implement
async
support - Allow use of
async
keyword - Implement support for fallible lazy builders
- Support for builder's custom error type
- Introduce 'sync' and 'async' features
Bug Fixes
- Implement
Clone
forFXProxyAsync
- Error diagnostics for serde-related code
- Fieldx_derive must depend on fieldx by path in dev-deps
Refactor
- Rename internal structs for the sake of naming consistency
Documentation
- Update docs with
async
addition - Completed documenting
fieldx_aux
crate
Testing
- Only test failing compiles under the Makefile.toml environment
- Fix testing documentation examples of
fieldx_derive
crate
Fix
- Don't implement Default for shadow if it's not needed
Styling
- Format all sources
fieldx-v0.1.7 - 2024-11-22
Features
- Implement builder
init
argument
Documentation
- Document builder
init
argument
fieldx-v0.1.6 - 2024-10-19
Features
- Allow field's
default
to be just a keyword so it would fallback toDefault::default()
- Make builder setter methods to use more common 'self ownership' scheme instead of using
&mut
Bug Fixes
- Avoid function name case warning
- Reduce builder dependency on Default
- Allow non-snake-case names for generated serde methods
️ Miscellaneous Tasks
- Release fieldx version 0.1.5
fieldx-v0.1.5 - 2024-10-03
Features
- Complete implementation of reference counted objects
- Make builder's
into
argument acceptinto(off)
form - Add support for
builder(required)
- Implement inner mutability pattern
- Implement struct-level
builder(opt_in)
- Allow better granularity over fields concurrency mode
- Implement PartialEq and Eq
- Added two convenice types: FXSynValueArg and FXSynTupleArg
- Added implementation of FXPunctuated
Bug Fixes
- Marshalling of optional fields
- Fix a thinko in serde deserialization of optionals
- Suppress a harmless warning
- Remove unused import
- Improve some error location reporting
- Propagate "diagnostics" feature to the darling crate
Refactor
- Make more types available via fieldx_aux
- Split fxproxy proxy module into submodules
- Get rid of FXStructSync and FXStructNonSync
- Removed unused struct
Documentation
- Describe interior mutability pattern
️ Miscellaneous Tasks
- Release fieldx_derive_support version 0.1.4
- Release fieldx_aux version 0.1.4
- Release fieldx_derive version 0.1.4
- Release fieldx version 0.1.4
- Release fieldx_derive_support version 0.1.5
- Release fieldx_aux version 0.1.5
- Release fieldx_derive version 0.1.5
- Release fieldx version 0.1.5
fieldx-v0.1.3 - 2024-08-02
Features
- Add feature
send_guard
- Support reference counted objects
Documentation
- Document the new
rc
argument and crate features
️ Miscellaneous Tasks
- Release fieldx version 0.1.3
fieldx-v0.1.2 - 2024-06-19
Features
- ️‼️ breaking Allow optional unlocked fields on sync structs
- Add support for
attributes
andattributes_impl
forfxstruct
Bug Fixes
- Make sure that Copy trait bound check doesn't fail for generics
Documentation
- Document new argument
lock
- Document
attributes
andattributes_impl
offxstruct
Testing
- Streamline toolchain(version)-dependent testing
- Use stricter/safer atomic ordering
- Refactor tests to get rid of warnings
Maintenance
- Set some environment variables conditionally
- (CI) Exclude
nightly
toolchain from testing underwindows
- (cliff) Allow scoping for
feat
,fix
, andmaint
groups
️ Miscellaneous Tasks
- Release fieldx version 0.1.2
Main
- Should've not use
publish
withcargo release
fieldx-v0.1.1 - 2024-06-02
Features
- ️‼️ breaking Full support for accessors for sync structs and
lock
argument- ⚠️ new accessors are incompatible with the previous approach
Documentation
- Document the changes, related to the accessors of sync structs
Testing
- Adjusted tests for the new accessors concept and
lock
Maintenance
- Fix incorrect handling of environment variables in Makefile.toml
- Fix generation of CHANGELOG by
cargo release
- Use
cargo release
for thepublish
target