- Release notes are available on GitHub.
- 2024-12-12: Merged PR to correct validations for directions requests. Thank you ARBaart and congrats on your first single character PR!
- 2024-11-07: Merged a patch for an enum to allow for round-tripping. Thank you for the PR xyres137.
- 2024-11-07: Corrected issue with
Status
enums not round-tripping through de-serialisation and re-serialisation.
- 2024-10-15: Small tweaks to the features. Put back
enable-reqwest
.
-
2024-10-05: If your crate directly references the
enable-reqwest
feature in this crate, it has been renamed toreqwest
as of version 3.7.0. -
2024-10-05: Many features have been added, some features have been renamed. Please see the Cargo.toml for a complete list of available features. The default features have changed a bit (for example,
reqwest/http2
had been accidentally left out but is now enabled). No negative effect is expected. -
2024-10-05: Moved crate from using serde_json for JSON parsing over to simd-json.
- 2024-09-21: Dependencies bump.
- 2024-07-25: Added additional conversion traits from
LatLng
type toLocation
andWaypoint
types for improved ergonomics.
-
2024-07-25: Added support for getting
LatLng
structs from tuples, i.e.(43.68, 7.32)
-
2024-07-25: Applied
clippy
suggestions -
2024-07-25: Dependency bumps
-
2024-07-19: Adjusts
reqwest
client's default timeouts for more reliable operation. -
2024-06-15: This crate now instructs
serde
to not serialize empty fields. This may potentially save a bit of disk space and bandwidth.
-
2024-06-09: Increased flexibility of interface by using more
impl Into<Type>
parameters. -
2024-06-09: Clean-up of
tracing
messages, instrumentation and log levels.
-
2024-06-05: New, optional
polyline
feature. This allows for easy conversion ofgoogle_maps
types (such as theRoute
and theStep
) to a geo LineString. Both thepolyline
andgeo
features must be enabled for these traits and methods to be available. -
2024-06-05: Improved support for rust's geo eco-system with more type conversion traits.
-
2024-06-04: Fixed some
Vec
fields by ensuring that the serdedefault
field attribute is applied to allVec
fields in response structs. Thanks to chunhui2001 for the pull request and to PrinceOfBorgo for issue #27. -
2024-05-20: Added
duration
helper method to thePlaceOpeningHoursPeriod
type which will measure the length of the opening hours period. -
2024-05-19: Improved
GoogleMapsClient
interface ergonomics. Client methods now useimpl Into<Type>
and generics extensively. This means that rust will automatically take care of many type conversions needed to build your Google Maps requests. -
2024-05-11: Added an
Other
variant to most enums. The will future-proof the crate for when Google Maps adds additional variants. Previously, serde would return an error when encountering unknown variants.
-
2024-05-03: Improved ergonomics surrounding
Location
andWaypoint
types. New functions:from_address
,from_place_id
,try_from_f32
andtry_from_f64
. -
2024-05-03:
reqwest-maybe-middleware
was forked and integrated intogoogle_maps
for now, until the crate can be updated. maybe-middleware has also been properly feature-gated and is turned-off by default. -
2024-03-10: Addressed deprecated functions in the new
chrono
version0.4.37
. -
2024-03-10: The ol'
cargo clippy --fix
-
2024-03-03: Fixes for certain feature gate combinations.
-
2024-02-28: Improved string-passing ergonomics.
-
2024-02-22: ⚠ Breaking change: Replaced all instances of
Option<Vec<_>>
with aVec<_>
.The
Option<Vec<_>>
was originally employed to getserde
to deserialize Google Maps data without any extra options. However, working around anOption
is extra, unnecessary work.#[serde(default)]
is now used to return an emptyVec
when there are no elements, rather than returning aNone
.
-
3.4.2: 2024-02-08:
google_maps::GoogleMapsClient::new
has been deprecated in favour ofgoogle_maps::GoogleMapsClient::try_new
-
3.4.2: 2024-02-08: Minor breaking change:
google_maps::GoogleMapsClient.with_rate
now uses a reference to the selected API (i.e..with_rate(&google_maps::Api::All)
instead of.with_rate(google_maps::Api::All)
) -
3.4.2: 2024-02-07:
README.md
makeover. Thank you seanpianka! -
3.4.2: 2024-02-07: Applied many
clippy
suggestions.
-
3.4.1: 2023-12-23: Added
Landmark
andOther
variants to thePlaceType
enum. -
3.4.1: 2023-12-10: Added default timeouts for the
reqwest
client.
-
3.4.0: 2023-11-15: Add Copy to types where it makes semantic sense and is efficient.
-
3.4.0: 2023-11-15: Switch over to use reqwest-maybe-middleware crate to enable users to pass in a request client with middleware.
-
3.4.0: 2023-11-15: Run
rustfmt
Thanks for the contributions, ChristianGoldapp!
-
3.3.2: 2023-08-08: Add support for distance_meters in Places Autocomplete response. Thanks for the contribution, victorcrimea!
-
3.3.2: 2023-08-08: Use u64 type to accomodate all possible values for
user_ratings_total
from Google Maps API. Thanks for the contribution, victorcrimea!
- 3.3.1: 2023-09-01: Place Details does not always return a result, now an
Option
.
-
3.3.0: 2023-07-23: ⚠ Breaking change: Corrections to Google Maps Places API “Text Search” implementation.
-
3.3.0: 2023-07-23: Implemented to Google Maps Places API “Nearby Search” interface.
use google_maps::prelude::*;
use rust_decimal_macros::dec;
let google_maps_client = GoogleMapsClient::new("YOUR_GOOGLE_API_KEY_HERE");
let search_results = google_maps_client.nearby_search(LatLng::try_from_dec(dec!(53.540_989), dec!(-113.493_768))?, 1_000)
.with_type(PlaceType::Restaurant)
.execute()
.await?;
println!("{:#?}", search_results);
- 3.3.0: 2023-07-23: Improvements to documentation.
- 3.2.4: 2023-06-17: Emergency update. Important types were moved.
- 3.2.3: 2023-06-17: Fixes for using this crate's optional feature flags.
-
3.2.2: 2023-06-16:
time 0.1
dependency was removed usingchrono
feature flags. Thanks for the contribution, popen2! -
3.2.2: 2023-06-16: More streamlining of crate's
Error
types. Not expected to have much impact to end-users. -
3.2.2: 2023-06-16: Fixes for
geo
feature.
- 3.2.1: 2023-06-13: By default,
google_maps
will now use therust_decimal
crate'sserde
feature. To switch back to the explicitserde-float
format, use thegoogle_maps
crate'sdecimal-serde-float
feature. Thanks for the contribution, popen2!
-
3.2.0: 2023-06-01: ⚠ Breaking change:
google_maps
types will now round-trip through strings.This crate previously “took advantage” of the
String::from
andToString
traits being able to have different outputs. However, this clever setup did not play nice with other crates.This is a “breaking change” because the
Display
andToString
traits both now have different outputs compared to previous versions of thegoogle_maps
crate:-
Previously:
println!("{}", Language::ChineseHongKong)
would result inChinese (Hong Kong)
. -
Now:
println!("{}", Language::ChineseHongKong)
will result inzh-HK
. -
Now, to see the
Chinese (Hong Kong)
name, use thedisplay
method. For example:println!("{}", Language::ChineseHongKong.display())
This update applies to all
google_maps
crateenum
types, includingCountry
,PlaceType
, and so on. -
-
3.2.0: 2023-05-31: ⚠ Breaking change: All
GoogleMapsClient
methods will now return the same error type. Previously, each API would return a different error type. This could be tedious or annoying when using several different APIs. -
3.2.0: 2023-05-31: Adjusted
tracing
log levels. -
3.2.0: 2023-05-31: Some house-keeping.
- 3.1.1: 2023-01-29: Update to Chinese languages. Thanks rick68!
-
3.1.0: 2022-11-27: ⚠ Breaking change:
Geometry.location_type
is now anOption
. -
3.1.0: 2022-11-27: Add basic support for Google Maps Places Text Search and Places Details.
- 3.0.1: 2022-10-01: Added
UNKNOWN_ERROR
variant to Directions API's geocoder status.
-
3.0.0: 2022-09-03: ⚠ Breaking change:
LatLng::try_from
had to be renamed toLatLng::try_from_dec
to fix name collision with the TryFrom trait. Addedtry_from_f32
andtry_from_f64
methods for theLatLng
type. -
3.0.0: 2022-09-04: Initial support for Google Maps Roads API: the Snap To Roads and the Nearest Roads services have been implemented. Unsure about supporting Speed Limits since, according to the documentation, it requires a special Google Maps plan.
-
3.0.0: 2022-09-03: Optional basic support for the geo crate and GeoRust ecosystem. This support may be enabled using the
geo
feature flag. When thegeo
feature is enabled, some types may loose support forserde
serialization & deserialization. If I've missed something you want or if you think of a better way of doing this, feel free to reach out. -
3.0.0: 2022-09-03: This crate's
Waypoint
andLocation
types now have variants that represent the geo crate'sCoordinate
andPoint
types.Locations
type now has variants that represent the geo crate'sLine
andLineString
types. It's now possible to make most Google Maps API requests using geo types, using the provided special helper methods when thegeo
feature flag is enabled. -
3.0.0: 2022-08-27: Optional type conversion support for the geo crate. This feature can be enabled with the
geo
feature flag. It makes using these crates together a little less burdensome. Includes some unidirectional and some bidirectional TryFrom conversions between this crate'sLatLng
,Waypoint
,Bounds
, and geo'sCoordinate
,Point
,Rect
,Polygon
types. -
3.0.0: 2022-09-04:
ClientSettings
renamed toGoogleMapsClient
. -
3.0.0: 2022-08-27: Adjusted
tracing
log levels.
-
2.1.7: 2022-08-27:
String
toenum
table look-ups are now powered by the phf (perfect hash functions) crate. Added manual implementations ofserde
deserializers for Google Maps client types, which take advantage of the newphf
tables. -
2.1.7: 2022-08-27: Google Maps client types now implement
FromStr
which gives access toparse
. For example:let the_golden_boy: LatLng = "49.8845224,-97.1469436".parse()?;
-
2.1.7: 2022-08-22: Added debug logging message to show Google Maps client's request activity.
-
2.1.6: 2022-08-19: Support for geocoding from Google Maps Place IDs. Thank you E-gy!
-
2.1.6: 2022-04-10:
country
was moved up the hierarchy because it's now being shared amongst several APIs. Madegoogle_maps::country
module public.
- 2.1.5: 2022-03-23: Partial support for the
Google Maps
Places API
. Implemented thePlace Autocomplete
andQuery Autocomplete
services. Example of basic usage:
let google_maps_client = GoogleMapsClient::new("YOUR_API_KEY_HERE");
let predictions = google_maps_client.place_autocomplete("51".to_string())
.with_location_and_radius(LatLng::try_from_dec(dec!(54), dec!(-114))?, 1_000)
.with_type(AutocompleteType::Address)
.execute()
.await?;
println!("{:#?}", predictions);
- 2.1.3: 2021-07-22: Web Assembly (WASM) support: if Google Maps API Client's
default-features
are set to false, all desired reqwest features (brotli
,rustls
, etc.) must be manually added to theCargo.toml
file. Now, theenable-reqwest
feature starts with no reqwest features so that Web Assembly users may rely on reqwest's JS fetch API. Also, changedquery_string()
toquery_url()
. Examplequery_url()
usage:
use google_maps::prelude::*;
let google_maps_client = GoogleMapsClient::new("YOUR_GOOGLE_API_KEY_HERE");
// Get query string from builder pattern:
let query_url = google_maps_client.time_zone(
LatLng::try_from_dec(dec!(50.090_903), dec!(14.400_512))?,
Utc::now()
).query_url();
// Insert your favourite HTTP client here:
let json = reqwest::get(query_url).await?.text().await?;
// Parse JSON string into a TimeZoneResponse structure:
let time_zone: TimeZoneResponse = json.parse()?;
// Dump entire response:
println!("{:#?}", time_zone);
- 2.1.2: 2021-07-18: Sorry for all of the updates. Made more dependencies
optional. This adds the ability to slim down this client when needed. Also,
spruced up the
query_string()
methods.
- 2.1.1: 2021-07-18: House-keeping. Fixed issue with Google Maps API
features
. Added support for using your own HTTP client.
- 2.1.0: 2021-07-17: Transitioned from an in-house retry/backoff implementation
to the
backoff
crate. Google Maps APIs are now optional through the use of feature flags. Improved examples.
- 2.0.2: 2021-07-16: Added support for using rustls-tls in reqwest dependency -
thanks seanpianka! Transitioned from
log
crate to thetracing
crate.
- 2.0.1: 2022-07-15: Now supports a user-configured Reqwest client in the Google
Maps client builder.
GoogleMapsClient::new("YOUR_API_KEY_HERE").with_reqwest_client(your_reqwest_client).build();
- 2.0.0: 2022-07-13: The Rust Google Maps client is now async thanks to seanpianka!
- 1.0.3: 2021-01-06: Updated dependencies. A few minor corrections. Async support is planned for the next month or two.
- 1.0.2: 2020-08-07: Corrected error where string formatted for display were being sent to the Google Maps Platform API. Thanks victorct-pronto!
- 1.0.1: 2020-05-25: Ensuring all public structures use Serde's serialize and deserialize traits. Thanks qrayven!
- 1.0.0: 2020-05-16: Interface stable. (This was a lie!)
- 0.7.3: 2020-04-25: For the Distance-Matrix API, some response fields that should have been public weren't. Fixed. Thanks sroebuck!
- 0.7.2: 2020-04-21: Small bug fixes. Also, some logging was causing stack overflows, so it had to be disabled.
-
0.7.1: 2020-03-10: Added in as many derivable traits as possible. Changed transit fare amount from
f64
torust_decimal::Decimal
. Clean-ups as commanded by Clippy. -
0.7.1: 2020-03-10: For Time Zone API requests from this crate has moved from expressing the time in
chrono::NaiveDateTime
tochrono::DateTime<Utc>
. See the updated time zone example.
-
0.7.0: 2020-03-08: Transitioned from
f64
torust_decimal::Decimal
for latitude and longitude coordinates. This eliminates rounding errors. TheDecimal
type is also hashable. Nice.LatLng
,Waypoint
,Location
types can now be used as keys for hash maps. To define aDecimal
value in your code, currently you must add therust_decimal_macros
dependency into yourCargo.toml
file. Use thedec!()
macro like so:dec!(12.345)
. This is the preferred way to define latitude and longitude coordinates. If you do not want to add this line to yourCargo.toml
file, you may also create aDecimal
from a&str
like so:Decimal::from_str("12.345").unwrap()
. See the new examples. Also, see the rust_decimal crate for more information. -
0.7.0: 2020-03-08: To better align this crate with Rust conventions, I've converted many
String
parameters to&str
parameters. If you're receiving new compilations errors likethe trait bound google_maps::directions::response:: driving_maneuver::DrivingManeuver: std::convert::From<std::string::String> is not satisfied
you will have to change your code to borrow the string. For example, changeTransitCurrency::try_from(currency)
toTransitCurrency::try_from(¤cy)
or toTransitCurrency::try_from(&*currency)
if its aString
type.
- 0.6.0: 2020-02-29: Cleaned up the
mod
anduse
declarations. To glob import everything from google_maps into your project, you can use theuse google_maps::prelude::*
convention now.
-
0.5.2: 2020-02-29: I'm a procedural programmer at heart, so using handles is second nature to me. In an oversight, I was forcing library users to use handles without being consciously aware of it. I have improved the ergonomics of the library. Check out the new examples.
-
0.5.2: 2020-02-29: There were inaccuracies in the rate limiting examples. Sorry if these poor examples caused you any frustration.
- 0.5.0: 2020-02-23: The
time
crate has deprecated thePrimitiveDateTime
struct. This crate has moved from thetime
crate to thechrono
crate. Since there is no reasonable way for this crate to always know which time zone is intended in every context, this crate relies on theNaiveDateTime
struct. That means that time and time zone considerations must be tracked and handled by you, the programmer. Check into thechrono-tz
crate which integrates nicely with thechrono
crate.
-
0.4.6: 2020-02-19: Emergency update! Case conflict for TransitMode. Had to force to lower case in URL query string builder.
-
0.4.6: 2020-02-19: Connected Travis CI.
-
0.4.6: 2020-02-19: Added support for sub-steps in Directions API.
- 0.4.5: 2020-02-19: Emergency update! Custom deserializer for Durations was not included in the 0.4.4 release.
-
0.4.4: 2020-02-19: Interface should be stablizing.
-
0.4.4: Added some helper functions for destructuring responses.
-
0.4.4: Ensured response structures are all declared as public.
-
0.4.4: 2020-02-18: Aliased
Distance
andDuration
structs toDirectionsDistance
andDirectionsDuration
respectively to prevent name collisions. -
0.4.4: 2020-02-18: Changed
DirectionsDuration.value
type fromu32
totime::Duration
type. -
0.4.4: 2020-02-18: Dropped my custom Serde deserializer in favour of the
time
crate's built-in Serde feature. -
0.4.4: 2020-02-17: Added support for waypoint optimization.
-
0.4.3: 2020-02-09: Happy 15th birthday to Google Maps!
-
0.4.3: 2020-02-09: Ensured request rate limiting was applied to all API requests.
-
0.4.2: 2020-02-06: Unix timestamps received from the Google Maps Platform are now automatically deserialized into
time::PrimitiveDateTime
structs for convenience. -
0.4.2: 2020-02-06: Removed precision limit for Google Maps Platform requests.
-
0.4.1: 2020-02-06: Added time zone and currency enumerations for look-up tables, conversions, and additional handling to be added in the future.
-
0.4.1: 2020-02-06: Fixed some errors in the examples.
-
0.4.1: 2020-02-05: Some internal restructuring to make the library more consistent. Improved many comments, better documentation.
- 0.4.0: ⚠ Breaking change: API keys are no longer passed directly to Google Maps requests. Now, a structure containing your API key, and several optional settings, is passed instead. For example:
Before:
let location = GeocodingReverseRequest::new(
YOUR_GOOGLE_API_KEY_HERE,
// 10 Downing St, Westminster, London
LatLng { lat: 51.5033635, lng: -0.1276248 }
)
After. Note to Rust newbies: you may need to change the ?
to an .unwrap()
if you're running these examples in your main()
function.
let my_settings = ClientSettings::new(YOUR_GOOGLE_API_KEY_HERE);
let location = GeocodingReverseRequest::new(
&mut my_settings,
// 10 Downing St, Westminster, London
LatLng(LatLng::try_from(51.5033635, -0.1276248)?),
)
-
0.4.0: ⚠ Breaking change: All response structures, such as
DirectionsResponse
, have been altered. -
0.4.0: ⚠ Breaking change: All LatLng enum variants have had the { lat, lng } fields removed in favour of LatLng structs. Use
LatLng::try_from(lat, lng)
to define latitude/longitude pairs. See the updated examples. -
0.4.0: ⚠ Breaking change: The Elevation API methods
positional_request()
&sampled_path_request()
have been renamed tofor_positional_request()
&for_sampled_path_request()
respectively. See the updated examples. -
0.4.0: ⚠ Breaking change: All
f32
fields have been increased tof64
fields. -
0.4.0: Implemented automatic retry with exponential backoff. This client library will now attempt to query the Google Cloud Platform several times before giving up and returning an error. Temporary network hiccups will no longer cause your program to fail.
-
0.4.0: Implemented request rate limiting. Each API can have different request rate limits.
-
0.4.0: Now implements the
log
crate with some logging messages for debugging.