diff --git a/src/lib.rs b/src/lib.rs index 3212408..63fdab7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,10 +1,10 @@ //! # Alexa SDK -//! +//! //! `alexa_sdk` implements stucts corresponding to the [Alexa JSON specification](https://developer.amazon.com/docs/custom-skills/request-and-response-json-reference.html) //! along with helper functions for common uses of the `Request` and `Response` objects. -//! +//! //! ## Usage -//! +//! //! Simplest possible Alexa "Hello, World" skill: //! //! ```rust @@ -77,5 +77,5 @@ pub mod request; pub mod response; -pub use self::request::{Request}; -pub use self::response::{Response}; \ No newline at end of file +pub use self::request::Request; +pub use self::response::Response; diff --git a/src/request.rs b/src/request.rs index 43d0bfb..dca2742 100644 --- a/src/request.rs +++ b/src/request.rs @@ -3,6 +3,8 @@ extern crate serde_derive; extern crate serde_json; use self::serde_derive::{Deserialize, Serialize}; +use serde_json::map::Map; +use serde_json::value::Value as SerdeValue; use std::collections::HashMap; use std::convert::From; @@ -44,6 +46,8 @@ pub struct User { pub struct Device { #[serde(rename = "deviceId")] pub device_id: String, + #[serde(rename = "supportedInterfaces")] + pub supported_interfaces: Option>, } #[derive(Serialize, Deserialize, Debug, Clone)] @@ -66,12 +70,16 @@ pub struct Context { pub system: System, #[serde(rename = "AudioPlayer")] pub audio_player: Option, + #[serde(rename = "Geolocation")] + pub geolocation: Option, } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct System { #[serde(rename = "apiAccessToken")] pub api_access_token: Option, + #[serde(rename = "apiEndpoint")] + pub api_endpoint: Option, pub device: Option, pub application: Option, } @@ -85,6 +93,57 @@ pub struct AudioPlayer { pub player_activity: Option, } +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct Geolocation { + #[serde(rename = "locationServices")] + pub location_services: Option, + pub timestamp: String, + pub coordinate: Option, + pub altitude: Option, + pub heading: Option, + pub speed: Option, +} + +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct LocationServices { + pub access: String, + pub status: String, +} + +#[derive(Serialize, Deserialize, Debug, Clone, Copy)] +pub struct Coordinate { + #[serde(rename = "latitudeInDegrees")] + pub latitude_degrees: f32, + #[serde(rename = "longitudeInDegrees")] + pub longitude_degrees: f32, + #[serde(rename = "accuracyInMeters")] + pub accuracy_meters: f32, +} + +#[derive(Serialize, Deserialize, Debug, Clone, Copy)] +pub struct Altitude { + #[serde(rename = "altitudeInMeters")] + pub altitude_meters: Option, + #[serde(rename = "accuracyInMeters")] + pub accuracy_meters: Option, +} + +#[derive(Serialize, Deserialize, Debug, Clone, Copy)] +pub struct Heading { + #[serde(rename = "directionInDegrees")] + pub direction_degrees: Option, + #[serde(rename = "accuracyInDegrees")] + pub accuracy_degrees: Option, +} + +#[derive(Serialize, Deserialize, Debug, Clone, Copy)] +pub struct Speed { + #[serde(rename = "speedInMetersPerSecond")] + pub speed_mps: Option, + #[serde(rename = "accuracyInMetersPerSecond")] + pub accuracy_mps: Option, +} + #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Intent { pub name: String,