use faucet_core::capabilities::config::is_set;
use faucet_core::{Capabilities, ConnectorDescriptor};
use serde_json::Value;
pub const DESCRIPTOR: ConnectorDescriptor = ConnectorDescriptor::new("spanner", capabilities)
.with_host_identity(faucet_common_spanner::host_identity);
fn capabilities(config: &Value) -> Capabilities {
Capabilities::builder()
.discover(true)
.shardable(config.is_null() || is_set(config, "shard"))
.build()
}
#[cfg(test)]
mod tests {
use super::*;
use serde_json::json;
#[test]
fn unsharded_config_discovers_only() {
assert_eq!(DESCRIPTOR.kind(), "spanner");
let c = DESCRIPTOR.capabilities(&json!({"query": "SELECT 1"}));
assert!(c.discover() && !c.shardable());
assert!(!c.exactly_once() && !c.columnar() && !c.native());
assert!(!DESCRIPTOR.capabilities(&json!({"shard": null})).shardable());
}
#[test]
fn shard_block_makes_it_shardable() {
let c = DESCRIPTOR.capabilities(&json!({"shard": {"key": "id"}}));
assert!(c.discover() && c.shardable());
}
#[test]
fn kind_level_view() {
let c = DESCRIPTOR.capabilities(&Value::Null);
assert!(c.discover() && c.shardable() && !c.keyed_dedup());
}
}