Skip to content

Commit 6ecb206

Browse files
Make settings value possibly any json type
Before it was forced to be a string
1 parent 03fd9cd commit 6ecb206

3 files changed

Lines changed: 19 additions & 13 deletions

File tree

aw-models/src/key_value.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use chrono::{DateTime, Utc};
22
use schemars::JsonSchema;
33
use serde::{Deserialize, Serialize};
4+
use serde_json::Value;
45

56
#[derive(Serialize, Deserialize, JsonSchema)]
67
pub struct Key {
@@ -10,12 +11,16 @@ pub struct Key {
1011
#[derive(Serialize, Deserialize, JsonSchema, Clone, Debug, PartialEq)]
1112
pub struct KeyValue {
1213
pub key: String,
13-
pub value: String,
14+
pub value: Value,
1415
pub timestamp: Option<DateTime<Utc>>,
1516
}
1617

1718
impl KeyValue {
18-
pub fn new<T: Into<String>>(key: T, value: T, timestamp: DateTime<Utc>) -> KeyValue {
19+
pub fn new<K: Into<String>, V: Into<Value>>(
20+
key: K,
21+
value: V,
22+
timestamp: DateTime<Utc>,
23+
) -> KeyValue {
1924
KeyValue {
2025
key: key.into(),
2126
value: value.into(),

aw-server/src/endpoints/settings.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ pub fn setting_set(
3131
let setting_key = parse_key(data.key)?;
3232

3333
let datastore: MutexGuard<'_, Datastore> = endpoints_get_lock!(state.datastore);
34-
let result = datastore.insert_key_value(&setting_key, &data.value);
34+
let result = datastore.insert_key_value(&setting_key, &data.value.to_string());
3535

3636
match result {
3737
Ok(_) => Ok(Status::Created),

aw-server/tests/api.rs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ mod api_tests {
1414

1515
use chrono::{DateTime, Utc};
1616
use rocket::http::{ContentType, Header, Status};
17+
use serde_json::{json, Value};
1718

1819
use aw_server::config;
1920
use aw_server::endpoints;
@@ -459,10 +460,10 @@ mod api_tests {
459460
assert_eq!(res.body_string().unwrap(), r#"{"message":"EmptyQuery"}"#);
460461
}
461462

462-
fn set_setting_request(client: &Client, key: &str, value: &str) -> Status {
463+
fn set_setting_request(client: &Client, key: &str, value: Value) -> Status {
463464
let body = serde_json::to_string(&KeyValue {
464465
key: key.to_string(),
465-
value: value.to_string(),
466+
value: value,
466467
timestamp: None,
467468
})
468469
.unwrap();
@@ -500,7 +501,7 @@ mod api_tests {
500501
let client = rocket::local::Client::new(server).expect("valid instance");
501502

502503
// Test getting not found (getting nonexistent key)
503-
let res = set_setting_request(&client, "thisisaverylongkthisisaverylongkthisisaverylongkthisisaverylongkthisisaverylongkthisisaverylongkthisisaverylongkthisisaverylongk", "");
504+
let res = set_setting_request(&client, "thisisaverylongkthisisaverylongkthisisaverylongkthisisaverylongkthisisaverylongkthisisaverylongkthisisaverylongkthisisaverylongk", json!(""));
504505
assert_eq!(res, rocket::http::Status::BadRequest);
505506
}
506507

@@ -510,7 +511,7 @@ mod api_tests {
510511
let client = rocket::local::Client::new(server).expect("valid instance");
511512

512513
// Test value creation
513-
let response_status = set_setting_request(&client, "test_key", "test_value");
514+
let response_status = set_setting_request(&client, "test_key", json!("test_value"));
514515
assert_eq!(response_status, rocket::http::Status::Created);
515516
}
516517

@@ -529,9 +530,9 @@ mod api_tests {
529530
let server = setup_testserver();
530531
let client = rocket::local::Client::new(server).expect("valid instance");
531532

532-
let response1_status = set_setting_request(&client, "test_key", "");
533+
let response1_status = set_setting_request(&client, "test_key", json!(""));
533534
assert_eq!(response1_status, rocket::http::Status::Created);
534-
let response2_status = set_setting_request(&client, "test_key_2", "");
535+
let response2_status = set_setting_request(&client, "test_key_2", json!(""));
535536
assert_eq!(response2_status, rocket::http::Status::Created);
536537

537538
let mut res = client.get("/api/0/settings/").dispatch();
@@ -549,7 +550,7 @@ mod api_tests {
549550
let client = rocket::local::Client::new(server).expect("valid instance");
550551

551552
let timestamp = Utc::now();
552-
let response_status = set_setting_request(&client, "test_key", "test_value");
553+
let response_status = set_setting_request(&client, "test_key", json!("test_value"));
553554
assert_eq!(response_status, rocket::http::Status::Created);
554555

555556
// Test getting
@@ -569,7 +570,7 @@ mod api_tests {
569570
let client = rocket::local::Client::new(server).expect("valid instance");
570571

571572
let timestamp = Utc::now();
572-
let post_1_status = set_setting_request(&client, "test_key", "test_value");
573+
let post_1_status = set_setting_request(&client, "test_key", json!("test_value"));
573574
assert_eq!(post_1_status, rocket::http::Status::Created);
574575

575576
let mut res = client.get("/api/0/settings/test_key").dispatch();
@@ -583,7 +584,7 @@ mod api_tests {
583584
);
584585

585586
let timestamp_2 = Utc::now();
586-
let post_2_status = set_setting_request(&client, "test_key", "changed_test_value");
587+
let post_2_status = set_setting_request(&client, "test_key", json!("changed_test_value"));
587588
assert_eq!(post_2_status, rocket::http::Status::Created);
588589

589590
let mut res = client.get("/api/0/settings/test_key").dispatch();
@@ -602,7 +603,7 @@ mod api_tests {
602603
let server = setup_testserver();
603604
let client = rocket::local::Client::new(server).expect("valid instance");
604605

605-
let response_status = set_setting_request(&client, "test_key", "");
606+
let response_status = set_setting_request(&client, "test_key", json!(""));
606607
assert_eq!(response_status, rocket::http::Status::Created);
607608

608609
// Test deleting

0 commit comments

Comments
 (0)