0.20.0
A note on this release
There have been a lot of changes across many repositories. This makes it difficult to provide a comprehensive list of breaking changes (there are a number of them, but upgrading should be fairly mechanical). For future releases we'll start maintaining a CHANGELOG
to collect changes as they occur.
The following is a general list of significant changes.
Async
This release adds async support to elastic
using the tokio
and futures
ecosystem.
The implementation uses generics to parameterise request builders. This means we share a lot of code between the sync and async APIs, but can make the docs noisier and harder to follow.
Combining repositories
Each of the crates in the elastic
organisation have been pulled in to this single repository. This will make it easier to track changes in the future, as well as share CI infrastructure. Overall it should lead to a more solid and contributor-friendly project.
elastic
now contains the following crates with synchronized versions:
elastic_requests
elastic_responses
elastic_types_derive_internals
elastic_types_derive
elastic_types
elastic_derive
elastic
Some specifics
elastic
Client
has been renamed toSyncClient
andClientBuilder
has been renamed toSyncClientBuilder
Client::new
has been removed in favour ofSyncClientBuilder
elastic_types
This release refactors Date
to start reducing dependence on chrono::DateTime
, and to make sure date formats aren't implicitly changed. Some of these changes might turn out to be too restrictive and may be reverted in the future (allowing formats to change without explicit conversions).
- Change
remap
methods to be static methods instead of instance methods - Add
DateExpr
for supporting date math expressions
Changes to Date
- Change
Date<F, M = DefaultDateMapping<F>>
toDate<M>
. So you can't just writeDate<EpochMillis>
anymore, it needs to beDate<DefaultDateMapping<EpochMillis>>
. This simplifies the generics, and makesDate
easier to work with. To get the ergonomics ofDate<EpochMillis>
back, you can use type aliases:
// For default date types with just a single format
type MyDateType = Date<DefaultDateMapping<EpochMillis>>;
// For default date types with any format
type MyDateType<F> = Date<DefaultDateMappinng<F>>;
- Adds a
DateValue
andFormattableDateValue
type - Use
DateValue
in theDateFormat::parse
andDateFormat::format
methods instead ofchrono::DateTime
- Remove the conversion from
chrono::DateTime
intoDate<M>
unlessM::Format = ChronoFormat
. This is becausechrono::DateTime
is already mappable with theChronoFormat
, so to make sure that formats aren't implicitly changed, you need to convert achrono::DateTime
into aDateValue
first, which doesn't have any format:
Before:
let date = Date::from(chrono_date);
After:
let date = Date::from(DateValue::from(chrono_date));
Changes to GeoPoint
- Like
Date
,GeoPoint<F, M = DefaultGeoPointMapping<F>>
has been changed toGeoPoint<M>
. Use the same type aliases approach for ergonomics
elastic_responses
- Make all fields on response types private
- Add iterators to response types. For
BulkResponse
andBulkErrorsResponse
, calliter
orinto_iter
. ForSearchResponse
callhits
,into_hits
,documents
orinto_documents
. - Remove the
SearchResponseOf
andGetResponseOf
types. NowSearchResponse
andGetResponse
require a generic type for the kind of document they contain.serde_json::Value
is re-exported for convenience.