I don't have a very concrete example to propose for this yet. But we need some way to build the NewSessionCmd object that allows setting the capabilities and desired capabilities.
In #9 I took the cheap way out and just used the json! macro to craft the capabilities. But we need something that can be used in a public api like a builder for the capabilities object.
Storage can be implemented via a new type (this uses the code in #9 as an example)
#[derive(Serialize, Default)]
pub struct Capabilities {
alwaysMatch: collections::BTreeMap<String, JsonValue>,
}
#[derive(Serialize)]
pub struct NewSessionCmd {
capabilities: Capabilities,
}
impl NewSessionCmd {
pub fn new() -> Self {
let mut capabilities: Capabilities = Default::default();
capabilities.alwaysMatch.insert("goog:chromeOptions".to_string(),
json!({"w3c": true}));
NewSessionCmd {
capabilities,
}
}
}
Maybe something like the following method in NewSessionCmd but have not taken into consideration the firstMatch attribute in the spec. Probably should have a look at it first.
pub fn capability(&mut self, name: &str, value: Option<JsonValue>) {
match value {
Some(value) => self.capabilities.alwaysMatch.insert(name.to_string(), value),
None => self.capabilities.alwaysMatch.remove(name),
};
}
My other doubt here is the type of the supplied value argument. Should we take a serde_json::Value or more generically anything that implements Serialize? Since Value does implement Serialize maybe we should start with just Value.
TODO
I don't have a very concrete example to propose for this yet. But we need some way to build the NewSessionCmd object that allows setting the capabilities and desired capabilities.
In #9 I took the cheap way out and just used the
json!macro to craft the capabilities. But we need something that can be used in a public api like a builder for the capabilities object.Storage can be implemented via a new type (this uses the code in #9 as an example)
Maybe something like the following method in
NewSessionCmdbut have not taken into consideration thefirstMatchattribute in the spec. Probably should have a look at it first.My other doubt here is the type of the supplied value argument. Should we take a
serde_json::Valueor more generically anything that implementsSerialize? Since Value does implement Serialize maybe we should start with just Value.TODO