1a1d56debSopenharmony_ci// Copyright (c) 2023 Huawei Device Co., Ltd. 2a1d56debSopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License"); 3a1d56debSopenharmony_ci// you may not use this file except in compliance with the License. 4a1d56debSopenharmony_ci// You may obtain a copy of the License at 5a1d56debSopenharmony_ci// 6a1d56debSopenharmony_ci// http://www.apache.org/licenses/LICENSE-2.0 7a1d56debSopenharmony_ci// 8a1d56debSopenharmony_ci// Unless required by applicable law or agreed to in writing, software 9a1d56debSopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS, 10a1d56debSopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11a1d56debSopenharmony_ci// See the License for the specific language governing permissions and 12a1d56debSopenharmony_ci// limitations under the License. 13a1d56debSopenharmony_ci 14a1d56debSopenharmony_cimod array; 15a1d56debSopenharmony_cimod index; 16a1d56debSopenharmony_cimod number; 17a1d56debSopenharmony_cimod object; 18a1d56debSopenharmony_ci 19a1d56debSopenharmony_cipub use array::Array; 20a1d56debSopenharmony_cipub use index::Index; 21a1d56debSopenharmony_cipub use number::Number; 22a1d56debSopenharmony_cipub use object::Object; 23a1d56debSopenharmony_ci 24a1d56debSopenharmony_ciuse crate::{start_parsing, CompactEncoder, Error, FormattedEncoder}; 25a1d56debSopenharmony_ciuse core::fmt::{Debug, Display, Formatter}; 26a1d56debSopenharmony_ciuse core::str::FromStr; 27a1d56debSopenharmony_ci#[cfg(feature = "c_adapter")] 28a1d56debSopenharmony_ciuse std::ffi::CString; 29a1d56debSopenharmony_ciuse std::io::{Read, Write}; 30a1d56debSopenharmony_ci 31a1d56debSopenharmony_ci#[cfg(feature = "c_adapter")] 32a1d56debSopenharmony_cipub type JsonString = CString; 33a1d56debSopenharmony_ci#[cfg(not(feature = "c_adapter"))] 34a1d56debSopenharmony_cipub type JsonString = String; 35a1d56debSopenharmony_ci 36a1d56debSopenharmony_ciuse crate::deserializer::Deserializer; 37a1d56debSopenharmony_ci#[cfg(not(feature = "c_adapter"))] 38a1d56debSopenharmony_ciuse std::fs::File; 39a1d56debSopenharmony_ci#[cfg(not(feature = "c_adapter"))] 40a1d56debSopenharmony_ciuse std::path::Path; 41a1d56debSopenharmony_ci 42a1d56debSopenharmony_ci/// There are 6 types of values that appear in Json text: 43a1d56debSopenharmony_ci/// 44a1d56debSopenharmony_ci/// 1.Null: Null tupe 45a1d56debSopenharmony_ci/// 46a1d56debSopenharmony_ci/// 2.Boolean: Boolean type 47a1d56debSopenharmony_ci/// 48a1d56debSopenharmony_ci/// 3.Number: Numerical type 49a1d56debSopenharmony_ci/// 50a1d56debSopenharmony_ci/// 4.String: String type 51a1d56debSopenharmony_ci/// 52a1d56debSopenharmony_ci/// 5.Array: Array type 53a1d56debSopenharmony_ci/// 54a1d56debSopenharmony_ci/// 6.Object: Object type 55a1d56debSopenharmony_ci/// 56a1d56debSopenharmony_ci/// RFC 7159 3. Values say 57a1d56debSopenharmony_ci/// “A Json value must be an object, an array, a number, a string, or a text string of false, null, or true.” 58a1d56debSopenharmony_ci/// 59a1d56debSopenharmony_ci/// # features 60a1d56debSopenharmony_ci/// Uses"c_adatper" feature: 61a1d56debSopenharmony_ci/// In order to adapt the C encapsulation layer interface, the structure changes the 62a1d56debSopenharmony_ci/// underlying implementation of String, and uses CString to get the char* pointer easily. 63a1d56debSopenharmony_ci// TODO: Enhance the encapsulation of JsonValue, makes users can't use enum directly. 64a1d56debSopenharmony_ci#[derive(Clone)] 65a1d56debSopenharmony_cipub enum JsonValue { 66a1d56debSopenharmony_ci /// Null type 67a1d56debSopenharmony_ci Null, 68a1d56debSopenharmony_ci 69a1d56debSopenharmony_ci /// Boolean type 70a1d56debSopenharmony_ci Boolean(bool), 71a1d56debSopenharmony_ci 72a1d56debSopenharmony_ci /// Numerical type 73a1d56debSopenharmony_ci Number(Number), 74a1d56debSopenharmony_ci 75a1d56debSopenharmony_ci /// String type 76a1d56debSopenharmony_ci String(JsonString), 77a1d56debSopenharmony_ci 78a1d56debSopenharmony_ci /// Array type 79a1d56debSopenharmony_ci Array(Array), 80a1d56debSopenharmony_ci 81a1d56debSopenharmony_ci /// Object type 82a1d56debSopenharmony_ci Object(Object), 83a1d56debSopenharmony_ci} 84a1d56debSopenharmony_ci 85a1d56debSopenharmony_ci/// JsonValue print method 1, prints the content directly (without extra double quotes). 86a1d56debSopenharmony_ci/// 87a1d56debSopenharmony_ci/// # Examples 88a1d56debSopenharmony_ci/// ``` 89a1d56debSopenharmony_ci/// use ylong_json::JsonValue; 90a1d56debSopenharmony_ci/// 91a1d56debSopenharmony_ci/// let value: JsonValue = "hello".into(); 92a1d56debSopenharmony_ci/// let string = format!("{value}"); 93a1d56debSopenharmony_ci/// assert_eq!(string, "\"hello\""); 94a1d56debSopenharmony_ci/// ``` 95a1d56debSopenharmony_ciimpl Display for JsonValue { 96a1d56debSopenharmony_ci fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result { 97a1d56debSopenharmony_ci match self { 98a1d56debSopenharmony_ci Self::Null => write!(f, "null"), 99a1d56debSopenharmony_ci Self::Boolean(b) => write!(f, "{b}"), 100a1d56debSopenharmony_ci Self::Number(n) => Display::fmt(n, f), 101a1d56debSopenharmony_ci // The Debug output is the same for CString and String. 102a1d56debSopenharmony_ci Self::String(s) => write!(f, "{s:?}"), 103a1d56debSopenharmony_ci Self::Array(a) => Display::fmt(a, f), 104a1d56debSopenharmony_ci Self::Object(o) => Display::fmt(o, f), 105a1d56debSopenharmony_ci } 106a1d56debSopenharmony_ci } 107a1d56debSopenharmony_ci} 108a1d56debSopenharmony_ci 109a1d56debSopenharmony_ciimpl Debug for JsonValue { 110a1d56debSopenharmony_ci fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result { 111a1d56debSopenharmony_ci Display::fmt(self, f) 112a1d56debSopenharmony_ci } 113a1d56debSopenharmony_ci} 114a1d56debSopenharmony_ci 115a1d56debSopenharmony_ciimpl JsonValue { 116a1d56debSopenharmony_ci /// Creates an instance of JsonValue for Null type. 117a1d56debSopenharmony_ci /// 118a1d56debSopenharmony_ci /// # Examples 119a1d56debSopenharmony_ci /// ``` 120a1d56debSopenharmony_ci /// use ylong_json::JsonValue; 121a1d56debSopenharmony_ci /// 122a1d56debSopenharmony_ci /// let value = JsonValue::new_null(); 123a1d56debSopenharmony_ci /// assert_eq!(value, JsonValue::Null); 124a1d56debSopenharmony_ci /// ``` 125a1d56debSopenharmony_ci pub fn new_null() -> Self { 126a1d56debSopenharmony_ci Self::Null 127a1d56debSopenharmony_ci } 128a1d56debSopenharmony_ci 129a1d56debSopenharmony_ci /// Creates an instance of JsonValue for Boolean type. 130a1d56debSopenharmony_ci /// 131a1d56debSopenharmony_ci /// # Examples 132a1d56debSopenharmony_ci /// ``` 133a1d56debSopenharmony_ci /// use ylong_json::JsonValue; 134a1d56debSopenharmony_ci /// 135a1d56debSopenharmony_ci /// let value = JsonValue::new_boolean(true); 136a1d56debSopenharmony_ci /// assert_eq!(value, JsonValue::Boolean(true)); 137a1d56debSopenharmony_ci /// ``` 138a1d56debSopenharmony_ci pub fn new_boolean(boolean: bool) -> Self { 139a1d56debSopenharmony_ci Self::Boolean(boolean) 140a1d56debSopenharmony_ci } 141a1d56debSopenharmony_ci 142a1d56debSopenharmony_ci /// Creates an instance of JsonValue for Numerical type. 143a1d56debSopenharmony_ci /// 144a1d56debSopenharmony_ci /// # Examples 145a1d56debSopenharmony_ci /// ``` 146a1d56debSopenharmony_ci /// use ylong_json::JsonValue; 147a1d56debSopenharmony_ci /// 148a1d56debSopenharmony_ci /// let value = JsonValue::new_number(0.0.into()); 149a1d56debSopenharmony_ci /// assert_eq!(value, JsonValue::Number(0.0.into())); 150a1d56debSopenharmony_ci /// ``` 151a1d56debSopenharmony_ci pub fn new_number(number: Number) -> Self { 152a1d56debSopenharmony_ci Self::Number(number) 153a1d56debSopenharmony_ci } 154a1d56debSopenharmony_ci 155a1d56debSopenharmony_ci /// Creates an instance of JsonValue for String type. 156a1d56debSopenharmony_ci /// 157a1d56debSopenharmony_ci /// # Examples 158a1d56debSopenharmony_ci /// ```not run 159a1d56debSopenharmony_ci /// use ylong_json::JsonValue; 160a1d56debSopenharmony_ci /// 161a1d56debSopenharmony_ci /// let value = JsonValue::new_string("Hello World"); 162a1d56debSopenharmony_ci /// // When open "c_adapter" feature, the internal value is String. 163a1d56debSopenharmony_ci /// assert_eq!(value, JsonValue::String(String::from("Hello World"))); 164a1d56debSopenharmony_ci /// 165a1d56debSopenharmony_ci /// // When opening "c_adapter" feature, the internal value is CString. 166a1d56debSopenharmony_ci /// // assert_eq!(value, JsonValue::String(CString::new("Hello World"))); 167a1d56debSopenharmony_ci /// ``` 168a1d56debSopenharmony_ci pub fn new_string(str: &str) -> Self { 169a1d56debSopenharmony_ci // The underlying implementation of String here is CString. 170a1d56debSopenharmony_ci #[cfg(feature = "c_adapter")] 171a1d56debSopenharmony_ci let result = Self::String(JsonString::new(str).unwrap()); 172a1d56debSopenharmony_ci 173a1d56debSopenharmony_ci #[cfg(not(feature = "c_adapter"))] 174a1d56debSopenharmony_ci let result = Self::String(JsonString::from(str)); 175a1d56debSopenharmony_ci 176a1d56debSopenharmony_ci result 177a1d56debSopenharmony_ci } 178a1d56debSopenharmony_ci 179a1d56debSopenharmony_ci /// Creates an instance of JsonValue for Array type. 180a1d56debSopenharmony_ci /// 181a1d56debSopenharmony_ci /// # Examples 182a1d56debSopenharmony_ci /// ``` 183a1d56debSopenharmony_ci /// use ylong_json::{JsonValue, Array}; 184a1d56debSopenharmony_ci /// 185a1d56debSopenharmony_ci /// let value = JsonValue::new_array(Array::new()); 186a1d56debSopenharmony_ci /// assert_eq!(value, JsonValue::Array(Array::new())); 187a1d56debSopenharmony_ci /// ``` 188a1d56debSopenharmony_ci pub fn new_array(array: Array) -> Self { 189a1d56debSopenharmony_ci Self::Array(array) 190a1d56debSopenharmony_ci } 191a1d56debSopenharmony_ci 192a1d56debSopenharmony_ci /// Creates an instance of JsonValue for Object type. 193a1d56debSopenharmony_ci /// 194a1d56debSopenharmony_ci /// # Examples 195a1d56debSopenharmony_ci /// ``` 196a1d56debSopenharmony_ci /// use ylong_json::{JsonValue, Object}; 197a1d56debSopenharmony_ci /// 198a1d56debSopenharmony_ci /// let value = JsonValue::new_object(Object::new()); 199a1d56debSopenharmony_ci /// assert_eq!(value, JsonValue::Object(Object::new())); 200a1d56debSopenharmony_ci /// ``` 201a1d56debSopenharmony_ci pub fn new_object(object: Object) -> Self { 202a1d56debSopenharmony_ci Self::Object(object) 203a1d56debSopenharmony_ci } 204a1d56debSopenharmony_ci 205a1d56debSopenharmony_ci /// Determines whether JsonValue is Null type. Returns true if yes, false if no. 206a1d56debSopenharmony_ci /// 207a1d56debSopenharmony_ci /// # Examples 208a1d56debSopenharmony_ci /// ``` 209a1d56debSopenharmony_ci /// use ylong_json::JsonValue; 210a1d56debSopenharmony_ci /// 211a1d56debSopenharmony_ci /// let null_value = JsonValue::new_null(); 212a1d56debSopenharmony_ci /// assert_eq!(null_value.is_null(), true); 213a1d56debSopenharmony_ci /// 214a1d56debSopenharmony_ci /// let other_value = JsonValue::new_number(0.0.into()); 215a1d56debSopenharmony_ci /// assert_eq!(other_value.is_null(), false); 216a1d56debSopenharmony_ci /// ``` 217a1d56debSopenharmony_ci pub fn is_null(&self) -> bool { 218a1d56debSopenharmony_ci matches!(*self, Self::Null) 219a1d56debSopenharmony_ci } 220a1d56debSopenharmony_ci 221a1d56debSopenharmony_ci /// Determines whether JsonValue is Boolean type. Returns true if yes, false if no. 222a1d56debSopenharmony_ci /// 223a1d56debSopenharmony_ci /// # Examples 224a1d56debSopenharmony_ci /// ``` 225a1d56debSopenharmony_ci /// use ylong_json::JsonValue; 226a1d56debSopenharmony_ci /// 227a1d56debSopenharmony_ci /// let boolean_value = JsonValue::new_boolean(true); 228a1d56debSopenharmony_ci /// assert_eq!(boolean_value.is_boolean(), true); 229a1d56debSopenharmony_ci /// 230a1d56debSopenharmony_ci /// let other_value = JsonValue::new_null(); 231a1d56debSopenharmony_ci /// assert_eq!(other_value.is_boolean(), false); 232a1d56debSopenharmony_ci /// ``` 233a1d56debSopenharmony_ci pub fn is_boolean(&self) -> bool { 234a1d56debSopenharmony_ci matches!(*self, Self::Boolean(_)) 235a1d56debSopenharmony_ci } 236a1d56debSopenharmony_ci 237a1d56debSopenharmony_ci /// Determines whether JsonValue is true. Returns true if yes, false if no. 238a1d56debSopenharmony_ci /// 239a1d56debSopenharmony_ci /// # Examples 240a1d56debSopenharmony_ci /// ``` 241a1d56debSopenharmony_ci /// use ylong_json::JsonValue; 242a1d56debSopenharmony_ci /// 243a1d56debSopenharmony_ci /// let true_value = JsonValue::new_boolean(true); 244a1d56debSopenharmony_ci /// assert_eq!(true_value.is_true(), true); 245a1d56debSopenharmony_ci /// 246a1d56debSopenharmony_ci /// let other_value = JsonValue::new_boolean(false); 247a1d56debSopenharmony_ci /// assert_eq!(other_value.is_true(), false); 248a1d56debSopenharmony_ci /// ``` 249a1d56debSopenharmony_ci pub fn is_true(&self) -> bool { 250a1d56debSopenharmony_ci match *self { 251a1d56debSopenharmony_ci Self::Boolean(x) => x, 252a1d56debSopenharmony_ci _ => false, 253a1d56debSopenharmony_ci } 254a1d56debSopenharmony_ci } 255a1d56debSopenharmony_ci 256a1d56debSopenharmony_ci /// Determines whether JsonValue is false. Returns true if yes, false if no. 257a1d56debSopenharmony_ci /// 258a1d56debSopenharmony_ci /// # Examples 259a1d56debSopenharmony_ci /// ``` 260a1d56debSopenharmony_ci /// use ylong_json::JsonValue; 261a1d56debSopenharmony_ci /// 262a1d56debSopenharmony_ci /// let false_value = JsonValue::new_boolean(false); 263a1d56debSopenharmony_ci /// assert_eq!(false_value.is_false(), true); 264a1d56debSopenharmony_ci /// 265a1d56debSopenharmony_ci /// let other_value = JsonValue::new_boolean(true); 266a1d56debSopenharmony_ci /// assert_eq!(other_value.is_false(), false); 267a1d56debSopenharmony_ci /// ``` 268a1d56debSopenharmony_ci pub fn is_false(&self) -> bool { 269a1d56debSopenharmony_ci match *self { 270a1d56debSopenharmony_ci Self::Boolean(x) => !x, 271a1d56debSopenharmony_ci _ => false, 272a1d56debSopenharmony_ci } 273a1d56debSopenharmony_ci } 274a1d56debSopenharmony_ci 275a1d56debSopenharmony_ci /// Determines whether JsonValue is Numerical type. Returns true if yes, false if no. 276a1d56debSopenharmony_ci /// 277a1d56debSopenharmony_ci /// # Examples 278a1d56debSopenharmony_ci /// ``` 279a1d56debSopenharmony_ci /// use ylong_json::JsonValue; 280a1d56debSopenharmony_ci /// 281a1d56debSopenharmony_ci /// let number_value = JsonValue::new_number(0.0.into()); 282a1d56debSopenharmony_ci /// assert_eq!(number_value.is_number(), true); 283a1d56debSopenharmony_ci /// 284a1d56debSopenharmony_ci /// let other_value = JsonValue::new_null(); 285a1d56debSopenharmony_ci /// assert_eq!(other_value.is_number(), false); 286a1d56debSopenharmony_ci /// ``` 287a1d56debSopenharmony_ci pub fn is_number(&self) -> bool { 288a1d56debSopenharmony_ci matches!(*self, Self::Number(_)) 289a1d56debSopenharmony_ci } 290a1d56debSopenharmony_ci 291a1d56debSopenharmony_ci /// Determines whether JsonValue is String type. Returns true if yes, false if no. 292a1d56debSopenharmony_ci /// 293a1d56debSopenharmony_ci /// # Examples 294a1d56debSopenharmony_ci /// ``` 295a1d56debSopenharmony_ci /// use ylong_json::JsonValue; 296a1d56debSopenharmony_ci /// 297a1d56debSopenharmony_ci /// let string_value = JsonValue::new_string("Hello World"); 298a1d56debSopenharmony_ci /// assert_eq!(string_value.is_string(), true); 299a1d56debSopenharmony_ci /// 300a1d56debSopenharmony_ci /// let other_value = JsonValue::new_null(); 301a1d56debSopenharmony_ci /// assert_eq!(other_value.is_string(), false); 302a1d56debSopenharmony_ci /// ``` 303a1d56debSopenharmony_ci pub fn is_string(&self) -> bool { 304a1d56debSopenharmony_ci matches!(*self, Self::String(_)) 305a1d56debSopenharmony_ci } 306a1d56debSopenharmony_ci 307a1d56debSopenharmony_ci /// Determines whether JsonValue is Array type. Returns true if yes, false if no. 308a1d56debSopenharmony_ci /// 309a1d56debSopenharmony_ci /// # Examples 310a1d56debSopenharmony_ci /// ``` 311a1d56debSopenharmony_ci /// use ylong_json::{JsonValue, Array}; 312a1d56debSopenharmony_ci /// 313a1d56debSopenharmony_ci /// let array_value = JsonValue::new_array(Array::new()); 314a1d56debSopenharmony_ci /// assert_eq!(array_value.is_array(), true); 315a1d56debSopenharmony_ci /// 316a1d56debSopenharmony_ci /// let other_value = JsonValue::new_null(); 317a1d56debSopenharmony_ci /// assert_eq!(other_value.is_array(), false); 318a1d56debSopenharmony_ci /// ``` 319a1d56debSopenharmony_ci pub fn is_array(&self) -> bool { 320a1d56debSopenharmony_ci matches!(*self, Self::Array(_)) 321a1d56debSopenharmony_ci } 322a1d56debSopenharmony_ci 323a1d56debSopenharmony_ci /// Determines whether JsonValue is Object type. Returns true if yes, false if no. 324a1d56debSopenharmony_ci /// 325a1d56debSopenharmony_ci /// # Examples 326a1d56debSopenharmony_ci /// ``` 327a1d56debSopenharmony_ci /// use ylong_json::{JsonValue, Object}; 328a1d56debSopenharmony_ci /// 329a1d56debSopenharmony_ci /// let object_value = JsonValue::new_object(Object::new()); 330a1d56debSopenharmony_ci /// assert_eq!(object_value.is_object(), true); 331a1d56debSopenharmony_ci /// 332a1d56debSopenharmony_ci /// let other_value = JsonValue::new_null(); 333a1d56debSopenharmony_ci /// assert_eq!(other_value.is_object(), false); 334a1d56debSopenharmony_ci /// ``` 335a1d56debSopenharmony_ci pub fn is_object(&self) -> bool { 336a1d56debSopenharmony_ci matches!(*self, Self::Object(_)) 337a1d56debSopenharmony_ci } 338a1d56debSopenharmony_ci 339a1d56debSopenharmony_ci /// Trys to convert JsonValue to a common reference of Boolean type. Conversion failure will return Error. 340a1d56debSopenharmony_ci /// 341a1d56debSopenharmony_ci /// # Examples 342a1d56debSopenharmony_ci /// ``` 343a1d56debSopenharmony_ci /// use ylong_json::{JsonValue, Error}; 344a1d56debSopenharmony_ci /// 345a1d56debSopenharmony_ci /// let boolean_value = JsonValue::new_boolean(true); 346a1d56debSopenharmony_ci /// assert_eq!(boolean_value.try_as_boolean().unwrap(), &true); 347a1d56debSopenharmony_ci /// 348a1d56debSopenharmony_ci /// let other_value = JsonValue::new_null(); 349a1d56debSopenharmony_ci /// assert!(other_value.try_as_boolean().is_err()); 350a1d56debSopenharmony_ci /// ``` 351a1d56debSopenharmony_ci pub fn try_as_boolean(&self) -> Result<&bool, Error> { 352a1d56debSopenharmony_ci match self { 353a1d56debSopenharmony_ci Self::Boolean(boolean) => Ok(boolean), 354a1d56debSopenharmony_ci _ => Err(Error::TypeTransform), 355a1d56debSopenharmony_ci } 356a1d56debSopenharmony_ci } 357a1d56debSopenharmony_ci 358a1d56debSopenharmony_ci /// Trys to convert JsonValue to a common reference of Numerical type. Conversion failure will return Error. 359a1d56debSopenharmony_ci /// 360a1d56debSopenharmony_ci /// # Examples 361a1d56debSopenharmony_ci /// ``` 362a1d56debSopenharmony_ci /// use ylong_json::{JsonValue, Number, Error}; 363a1d56debSopenharmony_ci /// 364a1d56debSopenharmony_ci /// let number_value = JsonValue::new_number(0.0.into()); 365a1d56debSopenharmony_ci /// assert_eq!(number_value.try_as_number().unwrap(), &Number::from(0.0)); 366a1d56debSopenharmony_ci /// 367a1d56debSopenharmony_ci /// let other_value = JsonValue::new_null(); 368a1d56debSopenharmony_ci /// assert!(other_value.try_as_number().is_err()); 369a1d56debSopenharmony_ci /// ``` 370a1d56debSopenharmony_ci pub fn try_as_number(&self) -> Result<&Number, Error> { 371a1d56debSopenharmony_ci match self { 372a1d56debSopenharmony_ci Self::Number(number) => Ok(number), 373a1d56debSopenharmony_ci _ => Err(Error::TypeTransform), 374a1d56debSopenharmony_ci } 375a1d56debSopenharmony_ci } 376a1d56debSopenharmony_ci 377a1d56debSopenharmony_ci /// Trys to convert JsonValue to a common reference of String type. Conversion failure will return Error. 378a1d56debSopenharmony_ci /// 379a1d56debSopenharmony_ci /// # Examples 380a1d56debSopenharmony_ci /// ```no_run 381a1d56debSopenharmony_ci /// #[cfg(feature = "c_adapter")] 382a1d56debSopenharmony_ci /// use std::ffi::CString; 383a1d56debSopenharmony_ci /// use ylong_json::{JsonValue, Error}; 384a1d56debSopenharmony_ci /// 385a1d56debSopenharmony_ci /// let string_value = JsonValue::new_string("Hello World"); 386a1d56debSopenharmony_ci /// #[cfg(feature = "c_adapter")] 387a1d56debSopenharmony_ci /// assert_eq!(string_value.try_as_string().unwrap(), &CString::new("Hello World").unwrap()); 388a1d56debSopenharmony_ci /// #[cfg(not(feature = "c_adapter"))] 389a1d56debSopenharmony_ci /// assert_eq!(string_value.try_as_string().unwrap(), &String::from("Hello World")); 390a1d56debSopenharmony_ci /// // When opening "c_adapter" feature, the underlying implementation is CString. 391a1d56debSopenharmony_ci /// //assert_eq!(string_value.try_as_string().unwrap(), &CString::new("Hello World").unwrap()); 392a1d56debSopenharmony_ci /// 393a1d56debSopenharmony_ci /// let other_value = JsonValue::new_null(); 394a1d56debSopenharmony_ci /// assert!(other_value.try_as_string().is_err()); 395a1d56debSopenharmony_ci /// ``` 396a1d56debSopenharmony_ci pub fn try_as_string(&self) -> Result<&JsonString, Error> { 397a1d56debSopenharmony_ci match self { 398a1d56debSopenharmony_ci Self::String(string) => Ok(string), 399a1d56debSopenharmony_ci _ => Err(Error::TypeTransform), 400a1d56debSopenharmony_ci } 401a1d56debSopenharmony_ci } 402a1d56debSopenharmony_ci 403a1d56debSopenharmony_ci /// Trys to convert JsonValue to a common reference of Array type. Conversion failure will return Error. 404a1d56debSopenharmony_ci /// 405a1d56debSopenharmony_ci /// # Examples 406a1d56debSopenharmony_ci /// ``` 407a1d56debSopenharmony_ci /// use ylong_json::{JsonValue, Array, Error}; 408a1d56debSopenharmony_ci /// 409a1d56debSopenharmony_ci /// let array_value = JsonValue::new_array(Array::new()); 410a1d56debSopenharmony_ci /// assert_eq!(array_value.try_as_array().unwrap(), &Array::new()); 411a1d56debSopenharmony_ci /// 412a1d56debSopenharmony_ci /// let other_value = JsonValue::new_null(); 413a1d56debSopenharmony_ci /// assert!(other_value.try_as_array().is_err()); 414a1d56debSopenharmony_ci /// ``` 415a1d56debSopenharmony_ci pub fn try_as_array(&self) -> Result<&Array, Error> { 416a1d56debSopenharmony_ci match self { 417a1d56debSopenharmony_ci Self::Array(array) => Ok(array), 418a1d56debSopenharmony_ci _ => Err(Error::TypeTransform), 419a1d56debSopenharmony_ci } 420a1d56debSopenharmony_ci } 421a1d56debSopenharmony_ci 422a1d56debSopenharmony_ci /// Trys to convert JsonValue to a common reference of Object type. Conversion failure will return Error. 423a1d56debSopenharmony_ci /// 424a1d56debSopenharmony_ci /// # Examples 425a1d56debSopenharmony_ci /// ``` 426a1d56debSopenharmony_ci /// use ylong_json::{JsonValue, Object, Error}; 427a1d56debSopenharmony_ci /// 428a1d56debSopenharmony_ci /// let array_value = JsonValue::new_object(Object::new()); 429a1d56debSopenharmony_ci /// assert_eq!(array_value.try_as_object().unwrap(), &Object::new()); 430a1d56debSopenharmony_ci /// 431a1d56debSopenharmony_ci /// let other_value = JsonValue::new_null(); 432a1d56debSopenharmony_ci /// assert!(other_value.try_as_object().is_err()); 433a1d56debSopenharmony_ci /// ``` 434a1d56debSopenharmony_ci pub fn try_as_object(&self) -> Result<&Object, Error> { 435a1d56debSopenharmony_ci match self { 436a1d56debSopenharmony_ci Self::Object(object) => Ok(object), 437a1d56debSopenharmony_ci _ => Err(Error::TypeTransform), 438a1d56debSopenharmony_ci } 439a1d56debSopenharmony_ci } 440a1d56debSopenharmony_ci 441a1d56debSopenharmony_ci /// Trys to convert JsonValue to a mutable reference of Boolean type. Conversion failure will return Error. 442a1d56debSopenharmony_ci /// 443a1d56debSopenharmony_ci /// # Examples 444a1d56debSopenharmony_ci /// ``` 445a1d56debSopenharmony_ci /// use ylong_json::{JsonValue, Error}; 446a1d56debSopenharmony_ci /// 447a1d56debSopenharmony_ci /// let mut boolean_value = JsonValue::new_boolean(true); 448a1d56debSopenharmony_ci /// assert_eq!(boolean_value.try_as_mut_boolean().unwrap(), &mut true); 449a1d56debSopenharmony_ci /// 450a1d56debSopenharmony_ci /// let mut other_value = JsonValue::new_null(); 451a1d56debSopenharmony_ci /// assert!(other_value.try_as_mut_boolean().is_err()); 452a1d56debSopenharmony_ci /// ``` 453a1d56debSopenharmony_ci pub fn try_as_mut_boolean(&mut self) -> Result<&mut bool, Error> { 454a1d56debSopenharmony_ci match self { 455a1d56debSopenharmony_ci Self::Boolean(boolean) => Ok(boolean), 456a1d56debSopenharmony_ci _ => Err(Error::TypeTransform), 457a1d56debSopenharmony_ci } 458a1d56debSopenharmony_ci } 459a1d56debSopenharmony_ci 460a1d56debSopenharmony_ci /// Trys to convert JsonValue to a mutable reference of Numerical type. Conversion failure will return Error. 461a1d56debSopenharmony_ci /// 462a1d56debSopenharmony_ci /// # Examples 463a1d56debSopenharmony_ci /// ``` 464a1d56debSopenharmony_ci /// use ylong_json::{JsonValue, Number, Error}; 465a1d56debSopenharmony_ci /// 466a1d56debSopenharmony_ci /// let mut number_value = JsonValue::new_number(0.0.into()); 467a1d56debSopenharmony_ci /// assert_eq!(number_value.try_as_mut_number().unwrap(), &mut Number::from(0.0)); 468a1d56debSopenharmony_ci /// 469a1d56debSopenharmony_ci /// let mut other_value = JsonValue::new_null(); 470a1d56debSopenharmony_ci /// assert!(other_value.try_as_mut_number().is_err()); 471a1d56debSopenharmony_ci /// ``` 472a1d56debSopenharmony_ci pub fn try_as_mut_number(&mut self) -> Result<&mut Number, Error> { 473a1d56debSopenharmony_ci match self { 474a1d56debSopenharmony_ci Self::Number(number) => Ok(number), 475a1d56debSopenharmony_ci _ => Err(Error::TypeTransform), 476a1d56debSopenharmony_ci } 477a1d56debSopenharmony_ci } 478a1d56debSopenharmony_ci 479a1d56debSopenharmony_ci /// Trys to convert JsonValue to a mutable reference of String type. Conversion failure will return Error. 480a1d56debSopenharmony_ci /// 481a1d56debSopenharmony_ci /// # Examples 482a1d56debSopenharmony_ci /// ```no_run 483a1d56debSopenharmony_ci /// #[cfg(feature = "c_adapter")] 484a1d56debSopenharmony_ci /// use std::ffi::CString; 485a1d56debSopenharmony_ci /// use ylong_json::{JsonValue, Error}; 486a1d56debSopenharmony_ci /// 487a1d56debSopenharmony_ci /// let mut string_value = JsonValue::new_string("Hello World"); 488a1d56debSopenharmony_ci /// #[cfg(feature = "c_adapter")] 489a1d56debSopenharmony_ci /// assert_eq!(string_value.try_as_mut_string().unwrap(), &mut CString::new("Hello World").unwrap()); 490a1d56debSopenharmony_ci /// #[cfg(not(feature = "c_adapter"))] 491a1d56debSopenharmony_ci /// assert_eq!(string_value.try_as_mut_string().unwrap(), &mut String::from("Hello World")); 492a1d56debSopenharmony_ci /// // When opening "c_adapter" feature, the underlying implementation is CString. 493a1d56debSopenharmony_ci /// //assert_eq!(string_value.try_as_mut_string().unwrap(), &mut CString::new("Hello World").unwrap()); 494a1d56debSopenharmony_ci /// 495a1d56debSopenharmony_ci /// let mut other_value = JsonValue::new_null(); 496a1d56debSopenharmony_ci /// assert!(other_value.try_as_mut_string().is_err()); 497a1d56debSopenharmony_ci /// ``` 498a1d56debSopenharmony_ci pub fn try_as_mut_string(&mut self) -> Result<&mut JsonString, Error> { 499a1d56debSopenharmony_ci match self { 500a1d56debSopenharmony_ci Self::String(string) => Ok(string), 501a1d56debSopenharmony_ci _ => Err(Error::TypeTransform), 502a1d56debSopenharmony_ci } 503a1d56debSopenharmony_ci } 504a1d56debSopenharmony_ci 505a1d56debSopenharmony_ci /// Trys to convert JsonValue to a mutable reference of Array type. Conversion failure will return Error. 506a1d56debSopenharmony_ci /// 507a1d56debSopenharmony_ci /// # Examples 508a1d56debSopenharmony_ci /// ``` 509a1d56debSopenharmony_ci /// use ylong_json::{JsonValue, Error, Array}; 510a1d56debSopenharmony_ci /// 511a1d56debSopenharmony_ci /// let mut array_value = JsonValue::new_array(Array::new()); 512a1d56debSopenharmony_ci /// assert_eq!(array_value.try_as_mut_array().unwrap(), &mut Array::new()); 513a1d56debSopenharmony_ci /// 514a1d56debSopenharmony_ci /// let mut other_value = JsonValue::new_null(); 515a1d56debSopenharmony_ci /// assert!(other_value.try_as_mut_array().is_err()); 516a1d56debSopenharmony_ci /// ``` 517a1d56debSopenharmony_ci pub fn try_as_mut_array(&mut self) -> Result<&mut Array, Error> { 518a1d56debSopenharmony_ci match self { 519a1d56debSopenharmony_ci Self::Array(array) => Ok(array), 520a1d56debSopenharmony_ci _ => Err(Error::TypeTransform), 521a1d56debSopenharmony_ci } 522a1d56debSopenharmony_ci } 523a1d56debSopenharmony_ci 524a1d56debSopenharmony_ci /// Trys to convert JsonValue to a mutable reference of Object type. Conversion failure will return Error. 525a1d56debSopenharmony_ci /// 526a1d56debSopenharmony_ci /// # Examples 527a1d56debSopenharmony_ci /// ``` 528a1d56debSopenharmony_ci /// use ylong_json::{JsonValue, Error, Object}; 529a1d56debSopenharmony_ci /// 530a1d56debSopenharmony_ci /// let mut object_value = JsonValue::new_object(Object::new()); 531a1d56debSopenharmony_ci /// assert_eq!(object_value.try_as_mut_object().unwrap(), &mut Object::new()); 532a1d56debSopenharmony_ci /// 533a1d56debSopenharmony_ci /// let mut other_value = JsonValue::new_null(); 534a1d56debSopenharmony_ci /// assert!(other_value.try_as_mut_object().is_err()); 535a1d56debSopenharmony_ci /// ``` 536a1d56debSopenharmony_ci pub fn try_as_mut_object(&mut self) -> Result<&mut Object, Error> { 537a1d56debSopenharmony_ci match self { 538a1d56debSopenharmony_ci Self::Object(object) => Ok(object), 539a1d56debSopenharmony_ci _ => Err(Error::TypeTransform), 540a1d56debSopenharmony_ci } 541a1d56debSopenharmony_ci } 542a1d56debSopenharmony_ci 543a1d56debSopenharmony_ci /// Trys to convert JsonValue to Boolean type. This method transfers ownership. 544a1d56debSopenharmony_ci /// Conversion failure will return Error. 545a1d56debSopenharmony_ci /// 546a1d56debSopenharmony_ci /// # Examples 547a1d56debSopenharmony_ci /// ``` 548a1d56debSopenharmony_ci /// use ylong_json::{JsonValue, Error}; 549a1d56debSopenharmony_ci /// 550a1d56debSopenharmony_ci /// let boolean_value = JsonValue::new_boolean(true); 551a1d56debSopenharmony_ci /// assert_eq!(boolean_value.try_into_boolean().unwrap(), true); 552a1d56debSopenharmony_ci /// 553a1d56debSopenharmony_ci /// let other_value = JsonValue::new_null(); 554a1d56debSopenharmony_ci /// assert!(other_value.try_into_boolean().is_err()); 555a1d56debSopenharmony_ci /// ``` 556a1d56debSopenharmony_ci pub fn try_into_boolean(self) -> Result<bool, Error> { 557a1d56debSopenharmony_ci match self { 558a1d56debSopenharmony_ci Self::Boolean(boolean) => Ok(boolean), 559a1d56debSopenharmony_ci _ => Err(Error::TypeTransform), 560a1d56debSopenharmony_ci } 561a1d56debSopenharmony_ci } 562a1d56debSopenharmony_ci 563a1d56debSopenharmony_ci /// Trys to convert JsonValue to Numerical type. This method transfers ownership. 564a1d56debSopenharmony_ci /// Conversion failure will return Error. 565a1d56debSopenharmony_ci /// 566a1d56debSopenharmony_ci /// The value will be output as f64. If you want to output other types, use 'as' to convert. 567a1d56debSopenharmony_ci /// 568a1d56debSopenharmony_ci /// # Examples 569a1d56debSopenharmony_ci /// ``` 570a1d56debSopenharmony_ci /// use ylong_json::{JsonValue, Number, Error}; 571a1d56debSopenharmony_ci /// 572a1d56debSopenharmony_ci /// let number_value = JsonValue::new_number(0.0.into()); 573a1d56debSopenharmony_ci /// assert_eq!(number_value.try_into_number().unwrap(), Number::from(0.0)); 574a1d56debSopenharmony_ci /// 575a1d56debSopenharmony_ci /// let other_value = JsonValue::new_null(); 576a1d56debSopenharmony_ci /// assert!(other_value.try_into_number().is_err()); 577a1d56debSopenharmony_ci /// ``` 578a1d56debSopenharmony_ci pub fn try_into_number(self) -> Result<Number, Error> { 579a1d56debSopenharmony_ci match self { 580a1d56debSopenharmony_ci Self::Number(number) => Ok(number), 581a1d56debSopenharmony_ci _ => Err(Error::TypeTransform), 582a1d56debSopenharmony_ci } 583a1d56debSopenharmony_ci } 584a1d56debSopenharmony_ci 585a1d56debSopenharmony_ci /// Trys to convert JsonValue to String type. This method transfers ownership. 586a1d56debSopenharmony_ci /// Conversion failure will return Error. 587a1d56debSopenharmony_ci /// 588a1d56debSopenharmony_ci /// # Examples 589a1d56debSopenharmony_ci /// ```no_run 590a1d56debSopenharmony_ci /// #[cfg(feature = "c_adapter")] 591a1d56debSopenharmony_ci /// use std::ffi::CString; 592a1d56debSopenharmony_ci /// use ylong_json::{JsonValue, Error}; 593a1d56debSopenharmony_ci /// 594a1d56debSopenharmony_ci /// let string_value = JsonValue::new_string("Hello World"); 595a1d56debSopenharmony_ci /// #[cfg(feature = "c_adapter")] 596a1d56debSopenharmony_ci /// assert_eq!(string_value.try_into_string().unwrap(), CString::new("Hello World").unwrap()); 597a1d56debSopenharmony_ci /// #[cfg(not(feature = "c_adapter"))] 598a1d56debSopenharmony_ci /// assert_eq!(string_value.try_into_string().unwrap(), String::from("Hello World")); 599a1d56debSopenharmony_ci /// // When opening "c_adapter" feature, the underlying implementation is CString. 600a1d56debSopenharmony_ci /// //assert_eq!(string_value.try_into_string().unwrap(), CString::new("Hello World").unwrap()); 601a1d56debSopenharmony_ci /// 602a1d56debSopenharmony_ci /// let other_value = JsonValue::new_null(); 603a1d56debSopenharmony_ci /// assert!(other_value.try_into_string().is_err()); 604a1d56debSopenharmony_ci /// ``` 605a1d56debSopenharmony_ci pub fn try_into_string(self) -> Result<JsonString, Error> { 606a1d56debSopenharmony_ci match self { 607a1d56debSopenharmony_ci Self::String(string) => Ok(string), 608a1d56debSopenharmony_ci _ => Err(Error::TypeTransform), 609a1d56debSopenharmony_ci } 610a1d56debSopenharmony_ci } 611a1d56debSopenharmony_ci 612a1d56debSopenharmony_ci /// Trys to convert JsonValue to Array type. This method transfers ownership. 613a1d56debSopenharmony_ci /// Conversion failure will return Error. 614a1d56debSopenharmony_ci /// 615a1d56debSopenharmony_ci /// # Examples 616a1d56debSopenharmony_ci /// ``` 617a1d56debSopenharmony_ci /// use ylong_json::{JsonValue, Error, Array}; 618a1d56debSopenharmony_ci /// 619a1d56debSopenharmony_ci /// let array_value = JsonValue::new_array(Array::new()); 620a1d56debSopenharmony_ci /// assert_eq!(array_value.try_into_array().unwrap(), Array::new()); 621a1d56debSopenharmony_ci /// 622a1d56debSopenharmony_ci /// let other_value = JsonValue::new_null(); 623a1d56debSopenharmony_ci /// assert!(other_value.try_into_array().is_err()); 624a1d56debSopenharmony_ci /// ``` 625a1d56debSopenharmony_ci pub fn try_into_array(self) -> Result<Array, Error> { 626a1d56debSopenharmony_ci match self { 627a1d56debSopenharmony_ci Self::Array(array) => Ok(array), 628a1d56debSopenharmony_ci _ => Err(Error::TypeTransform), 629a1d56debSopenharmony_ci } 630a1d56debSopenharmony_ci } 631a1d56debSopenharmony_ci 632a1d56debSopenharmony_ci /// Trys to convert JsonValue to Object type. This method transfers ownership. 633a1d56debSopenharmony_ci /// Conversion failure will return Error. 634a1d56debSopenharmony_ci /// 635a1d56debSopenharmony_ci /// # Examples 636a1d56debSopenharmony_ci /// ``` 637a1d56debSopenharmony_ci /// use ylong_json::{JsonValue, Error, Object}; 638a1d56debSopenharmony_ci /// 639a1d56debSopenharmony_ci /// let object_value = JsonValue::new_object(Object::new()); 640a1d56debSopenharmony_ci /// assert_eq!(object_value.try_into_object().unwrap(), Object::new()); 641a1d56debSopenharmony_ci /// 642a1d56debSopenharmony_ci /// let other_value = JsonValue::new_null(); 643a1d56debSopenharmony_ci /// assert!(other_value.try_into_object().is_err()); 644a1d56debSopenharmony_ci /// ``` 645a1d56debSopenharmony_ci pub fn try_into_object(self) -> Result<Object, Error> { 646a1d56debSopenharmony_ci match self { 647a1d56debSopenharmony_ci Self::Object(object) => Ok(object), 648a1d56debSopenharmony_ci _ => Err(Error::TypeTransform), 649a1d56debSopenharmony_ci } 650a1d56debSopenharmony_ci } 651a1d56debSopenharmony_ci 652a1d56debSopenharmony_ci /// Trys to remove a member form an Object or Array. If the member is found by Index, 653a1d56debSopenharmony_ci /// gets value of the member from the Object or Array. 654a1d56debSopenharmony_ci /// 655a1d56debSopenharmony_ci /// # Examples 656a1d56debSopenharmony_ci /// ``` 657a1d56debSopenharmony_ci /// use ylong_json::{Object, JsonValue}; 658a1d56debSopenharmony_ci /// 659a1d56debSopenharmony_ci /// let mut object = Object::new(); 660a1d56debSopenharmony_ci /// object.insert(String::from("key"), "value".into()); 661a1d56debSopenharmony_ci /// 662a1d56debSopenharmony_ci /// let mut value: JsonValue = object.into(); 663a1d56debSopenharmony_ci /// assert_eq!(value["key"], "value".into()); 664a1d56debSopenharmony_ci /// 665a1d56debSopenharmony_ci /// value.remove("key"); 666a1d56debSopenharmony_ci /// assert_eq!(value["key"], JsonValue::Null); 667a1d56debSopenharmony_ci /// ``` 668a1d56debSopenharmony_ci pub fn remove<I: index::Index>(&mut self, index: I) -> Option<JsonValue> { 669a1d56debSopenharmony_ci index.index_remove(self) 670a1d56debSopenharmony_ci } 671a1d56debSopenharmony_ci 672a1d56debSopenharmony_ci /// Reads the contents from the file and Trys to deserialize to a JsonValue instance. 673a1d56debSopenharmony_ci /// 674a1d56debSopenharmony_ci /// # Examples 675a1d56debSopenharmony_ci /// ```not run 676a1d56debSopenharmony_ci /// use ylong_json::JsonValue; 677a1d56debSopenharmony_ci /// 678a1d56debSopenharmony_ci /// let value = JsonValue::from_file("./json.txt").unwrap(); 679a1d56debSopenharmony_ci /// ``` 680a1d56debSopenharmony_ci #[cfg(not(feature = "c_adapter"))] 681a1d56debSopenharmony_ci pub fn from_file<P: AsRef<Path>>(path: P) -> Result<Self, Error> { 682a1d56debSopenharmony_ci let mut file = File::open(path.as_ref())?; 683a1d56debSopenharmony_ci Self::from_reader(&mut file) 684a1d56debSopenharmony_ci } 685a1d56debSopenharmony_ci 686a1d56debSopenharmony_ci /// Gets the text from an object that implements the Read trait provided 687a1d56debSopenharmony_ci /// by the standard library and Trys to deserialize it into a JsonValue instance. 688a1d56debSopenharmony_ci /// 689a1d56debSopenharmony_ci /// # Examples 690a1d56debSopenharmony_ci /// ```not run 691a1d56debSopenharmony_ci /// use ylong_json::JsonValue; 692a1d56debSopenharmony_ci /// use std::fs::File; 693a1d56debSopenharmony_ci /// 694a1d56debSopenharmony_ci /// let mut file = File::open("./json.txt").unwrap(); 695a1d56debSopenharmony_ci /// let value = JsonValue::from_reader(&mut file).unwrap(); 696a1d56debSopenharmony_ci /// ``` 697a1d56debSopenharmony_ci pub fn from_reader<R: Read>(input: R) -> Result<Self, Error> { 698a1d56debSopenharmony_ci let mut deserializer = Deserializer::new_from_io(input); 699a1d56debSopenharmony_ci start_parsing(&mut deserializer) 700a1d56debSopenharmony_ci } 701a1d56debSopenharmony_ci 702a1d56debSopenharmony_ci /// Reads the text from a type that can be converted to [u8] and Trys to deserialize it to a Json instance. 703a1d56debSopenharmony_ci /// 704a1d56debSopenharmony_ci /// # Examples 705a1d56debSopenharmony_ci /// ``` 706a1d56debSopenharmony_ci /// use ylong_json::JsonValue; 707a1d56debSopenharmony_ci /// 708a1d56debSopenharmony_ci /// let text = r#" 709a1d56debSopenharmony_ci /// { 710a1d56debSopenharmony_ci /// "key": "value" 711a1d56debSopenharmony_ci /// } 712a1d56debSopenharmony_ci /// "#; 713a1d56debSopenharmony_ci /// let value = JsonValue::from_text(text.as_bytes()).unwrap(); 714a1d56debSopenharmony_ci /// 715a1d56debSopenharmony_ci /// assert_eq!(value["key"], "value".into()); 716a1d56debSopenharmony_ci /// ``` 717a1d56debSopenharmony_ci pub fn from_text<T: AsRef<[u8]>>(text: T) -> Result<Self, Error> { 718a1d56debSopenharmony_ci let mut deserializer = Deserializer::new_from_slice(text.as_ref()); 719a1d56debSopenharmony_ci start_parsing(&mut deserializer) 720a1d56debSopenharmony_ci } 721a1d56debSopenharmony_ci 722a1d56debSopenharmony_ci /// Serializes the JsonValue instance to a formatted string with additional whitespace characters. 723a1d56debSopenharmony_ci /// 724a1d56debSopenharmony_ci /// # Examples 725a1d56debSopenharmony_ci /// ``` 726a1d56debSopenharmony_ci /// use ylong_json::JsonValue; 727a1d56debSopenharmony_ci /// 728a1d56debSopenharmony_ci /// let text = r#"{ 729a1d56debSopenharmony_ci /// "key": "value" 730a1d56debSopenharmony_ci /// } 731a1d56debSopenharmony_ci /// "#; 732a1d56debSopenharmony_ci /// let value = JsonValue::from_text(text.as_bytes()).unwrap(); 733a1d56debSopenharmony_ci /// let string = value.to_formatted_string().unwrap(); 734a1d56debSopenharmony_ci /// assert_eq!(string, text); 735a1d56debSopenharmony_ci /// ``` 736a1d56debSopenharmony_ci pub fn to_formatted_string(&self) -> Result<std::string::String, Error> { 737a1d56debSopenharmony_ci let mut vec = Vec::new(); 738a1d56debSopenharmony_ci self.formatted_encode(&mut vec)?; 739a1d56debSopenharmony_ci Ok(unsafe { std::string::String::from_utf8_unchecked(vec) }) 740a1d56debSopenharmony_ci } 741a1d56debSopenharmony_ci 742a1d56debSopenharmony_ci /// Serializes the JsonValue instance to a one-line string with no additional whitespace. 743a1d56debSopenharmony_ci /// 744a1d56debSopenharmony_ci /// # Examples 745a1d56debSopenharmony_ci /// ``` 746a1d56debSopenharmony_ci /// use ylong_json::JsonValue; 747a1d56debSopenharmony_ci /// 748a1d56debSopenharmony_ci /// let text = r#"{"key":"value"}"#; 749a1d56debSopenharmony_ci /// let value = JsonValue::from_text(text.as_bytes()).unwrap(); 750a1d56debSopenharmony_ci /// let string = value.to_compact_string().unwrap(); 751a1d56debSopenharmony_ci /// assert_eq!(string, text); 752a1d56debSopenharmony_ci /// ``` 753a1d56debSopenharmony_ci pub fn to_compact_string(&self) -> Result<std::string::String, Error> { 754a1d56debSopenharmony_ci let mut vec = Vec::new(); 755a1d56debSopenharmony_ci self.compact_encode(&mut vec)?; 756a1d56debSopenharmony_ci Ok(unsafe { std::string::String::from_utf8_unchecked(vec) }) 757a1d56debSopenharmony_ci } 758a1d56debSopenharmony_ci 759a1d56debSopenharmony_ci /// Serializes the JsonValue instance to a formatted string with additional whitespace characters. 760a1d56debSopenharmony_ci /// And outputs to the specified location as a stream of bytes. 761a1d56debSopenharmony_ci /// 762a1d56debSopenharmony_ci /// # Examples 763a1d56debSopenharmony_ci /// ``` 764a1d56debSopenharmony_ci /// use ylong_json::JsonValue; 765a1d56debSopenharmony_ci /// 766a1d56debSopenharmony_ci /// let text = r#"{ 767a1d56debSopenharmony_ci /// "key": "value" 768a1d56debSopenharmony_ci /// } 769a1d56debSopenharmony_ci /// "#; 770a1d56debSopenharmony_ci /// let value = JsonValue::from_text(text.as_bytes()).unwrap(); 771a1d56debSopenharmony_ci /// let mut vec = Vec::new(); 772a1d56debSopenharmony_ci /// value.formatted_encode(&mut vec).unwrap(); 773a1d56debSopenharmony_ci /// assert_eq!(vec, text.as_bytes()); 774a1d56debSopenharmony_ci /// ``` 775a1d56debSopenharmony_ci pub fn formatted_encode<W: Write>(&self, output: &mut W) -> Result<(), Error> { 776a1d56debSopenharmony_ci let mut encoder = FormattedEncoder::new(output); 777a1d56debSopenharmony_ci encoder.encode(self) 778a1d56debSopenharmony_ci } 779a1d56debSopenharmony_ci 780a1d56debSopenharmony_ci /// Serializes the JsonValue instance to a one-line string with no additional whitespace. 781a1d56debSopenharmony_ci /// And outputs to the specified location as a stream of bytes. 782a1d56debSopenharmony_ci /// 783a1d56debSopenharmony_ci /// # Examples 784a1d56debSopenharmony_ci /// ``` 785a1d56debSopenharmony_ci /// use ylong_json::JsonValue; 786a1d56debSopenharmony_ci /// 787a1d56debSopenharmony_ci /// let text = r#"{"key":"value"}"#; 788a1d56debSopenharmony_ci /// let value = JsonValue::from_text(text.as_bytes()).unwrap(); 789a1d56debSopenharmony_ci /// let mut vec = Vec::new(); 790a1d56debSopenharmony_ci /// value.compact_encode(&mut vec).unwrap(); 791a1d56debSopenharmony_ci /// assert_eq!(vec, text.as_bytes()); 792a1d56debSopenharmony_ci /// ``` 793a1d56debSopenharmony_ci pub fn compact_encode<W: Write>(&self, output: &mut W) -> Result<(), Error> { 794a1d56debSopenharmony_ci let mut encoder = CompactEncoder::new(output); 795a1d56debSopenharmony_ci encoder.encode(self) 796a1d56debSopenharmony_ci } 797a1d56debSopenharmony_ci} 798a1d56debSopenharmony_ci 799a1d56debSopenharmony_ciimpl FromStr for JsonValue { 800a1d56debSopenharmony_ci type Err = Error; 801a1d56debSopenharmony_ci 802a1d56debSopenharmony_ci /// Generates an instance of JsonValue from &str. 803a1d56debSopenharmony_ci /// 804a1d56debSopenharmony_ci /// # Examples 805a1d56debSopenharmony_ci /// ``` 806a1d56debSopenharmony_ci /// use core::str::FromStr; 807a1d56debSopenharmony_ci /// use ylong_json::JsonValue; 808a1d56debSopenharmony_ci /// 809a1d56debSopenharmony_ci /// let text = r#" 810a1d56debSopenharmony_ci /// { 811a1d56debSopenharmony_ci /// "key": "value" 812a1d56debSopenharmony_ci /// } 813a1d56debSopenharmony_ci /// "#; 814a1d56debSopenharmony_ci /// let value = JsonValue::from_str(text).unwrap(); 815a1d56debSopenharmony_ci /// 816a1d56debSopenharmony_ci /// assert_eq!(value["key"], "value".into()); 817a1d56debSopenharmony_ci /// ``` 818a1d56debSopenharmony_ci fn from_str(s: &str) -> Result<Self, Self::Err> { 819a1d56debSopenharmony_ci Self::from_text(s) 820a1d56debSopenharmony_ci } 821a1d56debSopenharmony_ci} 822a1d56debSopenharmony_ci 823a1d56debSopenharmony_ciimpl PartialEq for JsonValue { 824a1d56debSopenharmony_ci /// Determines whether two Jsonvalues are equal. 825a1d56debSopenharmony_ci /// Only the same type can be compared; different types simply return false. 826a1d56debSopenharmony_ci /// 827a1d56debSopenharmony_ci /// If types are the same, false is returned only if the internal variables are exactly equal. 828a1d56debSopenharmony_ci /// For example, when comparing arrays, two Arrays are considered equal 829a1d56debSopenharmony_ci /// only if all their JsonValues have the same position and value. 830a1d56debSopenharmony_ci /// When comparing objects, two Objects are considered equal 831a1d56debSopenharmony_ci /// only if all of their key/value pairs match one another. 832a1d56debSopenharmony_ci /// 833a1d56debSopenharmony_ci /// # Examples 834a1d56debSopenharmony_ci /// ``` 835a1d56debSopenharmony_ci /// use ylong_json::{JsonValue, Array, Object}; 836a1d56debSopenharmony_ci /// 837a1d56debSopenharmony_ci /// assert_eq!(JsonValue::new_null(), JsonValue::new_null()); 838a1d56debSopenharmony_ci /// assert_eq!(JsonValue::new_boolean(true), JsonValue::new_boolean(true)); 839a1d56debSopenharmony_ci /// assert_eq!(JsonValue::new_number(0.0.into()), JsonValue::new_number(0.0.into())); 840a1d56debSopenharmony_ci /// assert_eq!(JsonValue::new_string(""), JsonValue::new_string("")); 841a1d56debSopenharmony_ci /// assert_eq!(JsonValue::new_array(Array::new()), JsonValue::new_array(Array::new())); 842a1d56debSopenharmony_ci /// assert_eq!(JsonValue::new_object(Object::new()), JsonValue::new_object(Object::new())); 843a1d56debSopenharmony_ci /// 844a1d56debSopenharmony_ci /// assert_ne!(JsonValue::new_null(), JsonValue::new_number(0.0.into())); 845a1d56debSopenharmony_ci /// assert_ne!(JsonValue::new_boolean(true), JsonValue::new_boolean(false)); 846a1d56debSopenharmony_ci /// 847a1d56debSopenharmony_ci /// let mut array1 = Array::new(); 848a1d56debSopenharmony_ci /// array1.push(JsonValue::new_null()); 849a1d56debSopenharmony_ci /// 850a1d56debSopenharmony_ci /// let mut array2 = Array::new(); 851a1d56debSopenharmony_ci /// array2.push(JsonValue::new_number(0.0.into())); 852a1d56debSopenharmony_ci /// assert_ne!(JsonValue::new_array(array1), JsonValue::new_array(array2)); 853a1d56debSopenharmony_ci /// 854a1d56debSopenharmony_ci /// let mut object1 = Object::new(); 855a1d56debSopenharmony_ci /// object1.insert(String::from("Key"), JsonValue::new_null()); 856a1d56debSopenharmony_ci /// 857a1d56debSopenharmony_ci /// let mut object2 = Object::new(); 858a1d56debSopenharmony_ci /// object2.insert(String::from("Key"), JsonValue::new_number(0.0.into())); 859a1d56debSopenharmony_ci /// assert_ne!(JsonValue::new_object(object1), JsonValue::new_object(object2)); 860a1d56debSopenharmony_ci /// ``` 861a1d56debSopenharmony_ci fn eq(&self, other: &Self) -> bool { 862a1d56debSopenharmony_ci match (self, other) { 863a1d56debSopenharmony_ci (JsonValue::Null, JsonValue::Null) => true, 864a1d56debSopenharmony_ci (JsonValue::Boolean(a), JsonValue::Boolean(b)) => a == b, 865a1d56debSopenharmony_ci (JsonValue::Number(a), JsonValue::Number(b)) => a == b, 866a1d56debSopenharmony_ci (JsonValue::String(a), JsonValue::String(b)) => a == b, 867a1d56debSopenharmony_ci (JsonValue::Array(a), JsonValue::Array(b)) => a == b, 868a1d56debSopenharmony_ci (JsonValue::Object(a), JsonValue::Object(b)) => a == b, 869a1d56debSopenharmony_ci _ => false, 870a1d56debSopenharmony_ci } 871a1d56debSopenharmony_ci } 872a1d56debSopenharmony_ci} 873a1d56debSopenharmony_ci 874a1d56debSopenharmony_ciimpl<I: index::Index> core::ops::Index<I> for JsonValue { 875a1d56debSopenharmony_ci type Output = JsonValue; 876a1d56debSopenharmony_ci 877a1d56debSopenharmony_ci fn index(&self, index: I) -> &Self::Output { 878a1d56debSopenharmony_ci index.index_into(self) 879a1d56debSopenharmony_ci } 880a1d56debSopenharmony_ci} 881a1d56debSopenharmony_ci 882a1d56debSopenharmony_ciimpl<I: index::Index> core::ops::IndexMut<I> for JsonValue { 883a1d56debSopenharmony_ci fn index_mut(&mut self, index: I) -> &mut Self::Output { 884a1d56debSopenharmony_ci index.index_into_mut(self) 885a1d56debSopenharmony_ci } 886a1d56debSopenharmony_ci} 887a1d56debSopenharmony_ci 888a1d56debSopenharmony_ciimpl From<&str> for JsonValue { 889a1d56debSopenharmony_ci /// Converts from &str to JsonValue. 890a1d56debSopenharmony_ci /// 891a1d56debSopenharmony_ci /// # Examples 892a1d56debSopenharmony_ci /// ``` 893a1d56debSopenharmony_ci /// use ylong_json::JsonValue; 894a1d56debSopenharmony_ci /// 895a1d56debSopenharmony_ci /// let value: JsonValue = "Hello World".into(); 896a1d56debSopenharmony_ci /// ``` 897a1d56debSopenharmony_ci fn from(t: &str) -> Self { 898a1d56debSopenharmony_ci #[cfg(feature = "c_adapter")] 899a1d56debSopenharmony_ci let result = Self::String(JsonString::new(t).unwrap()); 900a1d56debSopenharmony_ci 901a1d56debSopenharmony_ci #[cfg(not(feature = "c_adapter"))] 902a1d56debSopenharmony_ci let result = Self::String(String::from(t)); 903a1d56debSopenharmony_ci result 904a1d56debSopenharmony_ci } 905a1d56debSopenharmony_ci} 906a1d56debSopenharmony_ci 907a1d56debSopenharmony_ciimpl From<JsonString> for JsonValue { 908a1d56debSopenharmony_ci /// Converts from String to JsonValue. 909a1d56debSopenharmony_ci /// 910a1d56debSopenharmony_ci /// # Examples 911a1d56debSopenharmony_ci /// ```not run 912a1d56debSopenharmony_ci /// use ylong_json::JsonValue; 913a1d56debSopenharmony_ci /// 914a1d56debSopenharmony_ci /// // Unused "c_adapter" feature. 915a1d56debSopenharmony_ci /// let value: JsonValue = String::from("Hello World").into(); 916a1d56debSopenharmony_ci /// // Uses "c_adapter" feature. 917a1d56debSopenharmony_ci /// // let value: JsonValue = CString::new("Hello World").into(); 918a1d56debSopenharmony_ci /// ``` 919a1d56debSopenharmony_ci fn from(t: JsonString) -> Self { 920a1d56debSopenharmony_ci Self::String(t) 921a1d56debSopenharmony_ci } 922a1d56debSopenharmony_ci} 923a1d56debSopenharmony_ci 924a1d56debSopenharmony_cimacro_rules! json_value_from_type { 925a1d56debSopenharmony_ci ($type: tt, $func: expr) => { 926a1d56debSopenharmony_ci impl From<$type> for JsonValue { 927a1d56debSopenharmony_ci #[doc = concat!("从 ", stringify!($type), " 转换为 JsonValue。")] 928a1d56debSopenharmony_ci /// 929a1d56debSopenharmony_ci /// # Examples 930a1d56debSopenharmony_ci /// ``` 931a1d56debSopenharmony_ci /// use ylong_json::*; 932a1d56debSopenharmony_ci /// 933a1d56debSopenharmony_ci #[doc = concat!("let value: JsonValue = ", stringify!($type), "::default().into();")] 934a1d56debSopenharmony_ci /// ``` 935a1d56debSopenharmony_ci fn from(t: $type) -> Self { 936a1d56debSopenharmony_ci $func(t.into()) 937a1d56debSopenharmony_ci } 938a1d56debSopenharmony_ci } 939a1d56debSopenharmony_ci 940a1d56debSopenharmony_ci impl From<&$type> for JsonValue { 941a1d56debSopenharmony_ci #[doc = concat!("从 &", stringify!($type), " 转换为 JsonValue。")] 942a1d56debSopenharmony_ci /// 943a1d56debSopenharmony_ci /// # Examples 944a1d56debSopenharmony_ci /// ``` 945a1d56debSopenharmony_ci /// use ylong_json::*; 946a1d56debSopenharmony_ci /// 947a1d56debSopenharmony_ci #[doc = concat!("let value: JsonValue = ", stringify!($type), "::default().into();")] 948a1d56debSopenharmony_ci /// ``` 949a1d56debSopenharmony_ci fn from(t: &$type) -> Self { 950a1d56debSopenharmony_ci $func(t.clone().into()) 951a1d56debSopenharmony_ci } 952a1d56debSopenharmony_ci } 953a1d56debSopenharmony_ci 954a1d56debSopenharmony_ci impl From<&mut $type> for JsonValue { 955a1d56debSopenharmony_ci #[doc = concat!("从 &mut", stringify!($type), " 转换为 JsonValue。")] 956a1d56debSopenharmony_ci /// 957a1d56debSopenharmony_ci /// # Examples 958a1d56debSopenharmony_ci /// ``` 959a1d56debSopenharmony_ci /// use ylong_json::*; 960a1d56debSopenharmony_ci /// 961a1d56debSopenharmony_ci #[doc = concat!("let value: JsonValue = ", stringify!($type), "::default().into();")] 962a1d56debSopenharmony_ci /// ``` 963a1d56debSopenharmony_ci fn from(t: &mut $type) -> Self { 964a1d56debSopenharmony_ci $func(t.clone().into()) 965a1d56debSopenharmony_ci } 966a1d56debSopenharmony_ci } 967a1d56debSopenharmony_ci }; 968a1d56debSopenharmony_ci} 969a1d56debSopenharmony_ci 970a1d56debSopenharmony_cimacro_rules! number_value_from_type { 971a1d56debSopenharmony_ci ($($type: tt),* $(,)?) => { 972a1d56debSopenharmony_ci $( 973a1d56debSopenharmony_ci impl From<$type> for JsonValue { 974a1d56debSopenharmony_ci #[doc = concat!("从 ", stringify!($type), " 转换为 JsonValue。")] 975a1d56debSopenharmony_ci /// 976a1d56debSopenharmony_ci /// # Examples 977a1d56debSopenharmony_ci /// ``` 978a1d56debSopenharmony_ci /// use ylong_json::JsonValue; 979a1d56debSopenharmony_ci /// 980a1d56debSopenharmony_ci /// // Due to the conversion to f64, there may be a loss of accuracy. 981a1d56debSopenharmony_ci #[doc = concat!("let value: JsonValue = ", stringify!($type), "::MAX.into();")] 982a1d56debSopenharmony_ci /// ``` 983a1d56debSopenharmony_ci fn from(t: $type) -> Self { 984a1d56debSopenharmony_ci Self::Number(Number::from(t)) 985a1d56debSopenharmony_ci } 986a1d56debSopenharmony_ci } 987a1d56debSopenharmony_ci )* 988a1d56debSopenharmony_ci } 989a1d56debSopenharmony_ci} 990a1d56debSopenharmony_ci 991a1d56debSopenharmony_cijson_value_from_type!(bool, JsonValue::new_boolean); 992a1d56debSopenharmony_cijson_value_from_type!(Array, JsonValue::new_array); 993a1d56debSopenharmony_cijson_value_from_type!(Object, JsonValue::new_object); 994a1d56debSopenharmony_ci 995a1d56debSopenharmony_cinumber_value_from_type!(i8, i16, i32, i64, isize, u8, u16, u32, u64, usize, f32, f64); 996a1d56debSopenharmony_ci 997a1d56debSopenharmony_ci#[cfg(test)] 998a1d56debSopenharmony_cimod ut_json_value { 999a1d56debSopenharmony_ci use super::{array::Array, object::Object, JsonValue}; 1000a1d56debSopenharmony_ci use std::io::{ErrorKind, Read, Result}; 1001a1d56debSopenharmony_ci use std::str::FromStr; 1002a1d56debSopenharmony_ci 1003a1d56debSopenharmony_ci /// UT test for `JsonValue::fmt`. 1004a1d56debSopenharmony_ci /// 1005a1d56debSopenharmony_ci /// # Title 1006a1d56debSopenharmony_ci /// ut_json_value_fmt 1007a1d56debSopenharmony_ci /// 1008a1d56debSopenharmony_ci /// # Brief 1009a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1010a1d56debSopenharmony_ci /// 2. Calls `Display::fmt` and `Debug::fmt`. 1011a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1012a1d56debSopenharmony_ci #[test] 1013a1d56debSopenharmony_ci fn ut_json_value_fmt() { 1014a1d56debSopenharmony_ci let value = JsonValue::new_null(); 1015a1d56debSopenharmony_ci assert_eq!(format!("{value}"), "null"); 1016a1d56debSopenharmony_ci assert_eq!(format!("{value:?}"), "null"); 1017a1d56debSopenharmony_ci 1018a1d56debSopenharmony_ci let value = JsonValue::new_boolean(false); 1019a1d56debSopenharmony_ci assert_eq!(format!("{value}"), "false"); 1020a1d56debSopenharmony_ci assert_eq!(format!("{value:?}"), "false"); 1021a1d56debSopenharmony_ci 1022a1d56debSopenharmony_ci let value = JsonValue::new_number(12.34.into()); 1023a1d56debSopenharmony_ci assert_eq!(format!("{value}"), "12.34"); 1024a1d56debSopenharmony_ci assert_eq!(format!("{value:?}"), "12.34"); 1025a1d56debSopenharmony_ci 1026a1d56debSopenharmony_ci let value = JsonValue::new_string("Hello"); 1027a1d56debSopenharmony_ci assert_eq!(format!("{value}"), "\"Hello\""); 1028a1d56debSopenharmony_ci assert_eq!(format!("{value:?}"), "\"Hello\""); 1029a1d56debSopenharmony_ci 1030a1d56debSopenharmony_ci let value = JsonValue::new_array(array!(false, JsonValue::Null, 12.34)); 1031a1d56debSopenharmony_ci assert_eq!(format!("{value}"), "[false,null,12.34]"); 1032a1d56debSopenharmony_ci assert_eq!(format!("{value}"), "[false,null,12.34]"); 1033a1d56debSopenharmony_ci 1034a1d56debSopenharmony_ci let object = object!("null" => JsonValue::Null); 1035a1d56debSopenharmony_ci let value = JsonValue::new_object(object); 1036a1d56debSopenharmony_ci assert_eq!(format!("{value}"), "{\"null\":null}"); 1037a1d56debSopenharmony_ci assert_eq!(format!("{value}"), "{\"null\":null}"); 1038a1d56debSopenharmony_ci } 1039a1d56debSopenharmony_ci 1040a1d56debSopenharmony_ci /// UT test for `JsonValue::clone`. 1041a1d56debSopenharmony_ci /// 1042a1d56debSopenharmony_ci /// # Title 1043a1d56debSopenharmony_ci /// ut_json_value_fmt 1044a1d56debSopenharmony_ci /// 1045a1d56debSopenharmony_ci /// # Brief 1046a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1047a1d56debSopenharmony_ci /// 2. Calls `JsonValue::clone`. 1048a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1049a1d56debSopenharmony_ci #[test] 1050a1d56debSopenharmony_ci fn ut_json_value_clone() { 1051a1d56debSopenharmony_ci let value1 = JsonValue::new_null(); 1052a1d56debSopenharmony_ci assert_eq!(value1, value1.clone()); 1053a1d56debSopenharmony_ci } 1054a1d56debSopenharmony_ci 1055a1d56debSopenharmony_ci /// UT test for `JsonValue::is_null`. 1056a1d56debSopenharmony_ci /// 1057a1d56debSopenharmony_ci /// # Title 1058a1d56debSopenharmony_ci /// ut_json_value_is_null 1059a1d56debSopenharmony_ci /// 1060a1d56debSopenharmony_ci /// # Brief 1061a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1062a1d56debSopenharmony_ci /// 2. Calls `JsonValue::is_null`. 1063a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1064a1d56debSopenharmony_ci #[test] 1065a1d56debSopenharmony_ci fn ut_json_value_is_null() { 1066a1d56debSopenharmony_ci assert!(JsonValue::new_null().is_null()); 1067a1d56debSopenharmony_ci assert!(!JsonValue::new_boolean(true).is_null()); 1068a1d56debSopenharmony_ci assert!(!JsonValue::new_boolean(false).is_null()); 1069a1d56debSopenharmony_ci assert!(!JsonValue::new_number(12.34.into()).is_null()); 1070a1d56debSopenharmony_ci assert!(!JsonValue::new_string("hello").is_null()); 1071a1d56debSopenharmony_ci assert!(!JsonValue::new_array(Array::new()).is_null()); 1072a1d56debSopenharmony_ci assert!(!JsonValue::new_object(Object::new()).is_null()); 1073a1d56debSopenharmony_ci } 1074a1d56debSopenharmony_ci 1075a1d56debSopenharmony_ci /// UT test for `JsonValue::is_true`. 1076a1d56debSopenharmony_ci /// 1077a1d56debSopenharmony_ci /// # Title 1078a1d56debSopenharmony_ci /// ut_json_value_is_true 1079a1d56debSopenharmony_ci /// 1080a1d56debSopenharmony_ci /// # Brief 1081a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1082a1d56debSopenharmony_ci /// 2. Calls `JsonValue::is_true`. 1083a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1084a1d56debSopenharmony_ci #[test] 1085a1d56debSopenharmony_ci fn ut_json_value_is_true() { 1086a1d56debSopenharmony_ci assert!(!JsonValue::new_null().is_true()); 1087a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(true).is_true()); 1088a1d56debSopenharmony_ci assert!(!JsonValue::new_boolean(false).is_true()); 1089a1d56debSopenharmony_ci assert!(!JsonValue::new_number(12.34.into()).is_true()); 1090a1d56debSopenharmony_ci assert!(!JsonValue::new_string("hello").is_true()); 1091a1d56debSopenharmony_ci assert!(!JsonValue::new_array(Array::new()).is_true()); 1092a1d56debSopenharmony_ci assert!(!JsonValue::new_object(Object::new()).is_true()); 1093a1d56debSopenharmony_ci } 1094a1d56debSopenharmony_ci 1095a1d56debSopenharmony_ci /// UT test for `JsonValue::is_false`. 1096a1d56debSopenharmony_ci /// 1097a1d56debSopenharmony_ci /// # Title 1098a1d56debSopenharmony_ci /// ut_json_value_is_false 1099a1d56debSopenharmony_ci /// 1100a1d56debSopenharmony_ci /// # Brief 1101a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1102a1d56debSopenharmony_ci /// 2. Calls `JsonValue::is_false`. 1103a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1104a1d56debSopenharmony_ci #[test] 1105a1d56debSopenharmony_ci fn ut_json_value_is_false() { 1106a1d56debSopenharmony_ci assert!(!JsonValue::new_null().is_false()); 1107a1d56debSopenharmony_ci assert!(!JsonValue::new_boolean(true).is_false()); 1108a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(false).is_false()); 1109a1d56debSopenharmony_ci assert!(!JsonValue::new_number(12.34.into()).is_false()); 1110a1d56debSopenharmony_ci assert!(!JsonValue::new_string("hello").is_false()); 1111a1d56debSopenharmony_ci assert!(!JsonValue::new_array(Array::new()).is_false()); 1112a1d56debSopenharmony_ci assert!(!JsonValue::new_object(Object::new()).is_false()); 1113a1d56debSopenharmony_ci } 1114a1d56debSopenharmony_ci 1115a1d56debSopenharmony_ci /// UT test for `JsonValue::is_boolean`. 1116a1d56debSopenharmony_ci /// 1117a1d56debSopenharmony_ci /// # Title 1118a1d56debSopenharmony_ci /// ut_json_value_is_false 1119a1d56debSopenharmony_ci /// 1120a1d56debSopenharmony_ci /// # Brief 1121a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1122a1d56debSopenharmony_ci /// 2. Calls `JsonValue::is_boolean`. 1123a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1124a1d56debSopenharmony_ci #[test] 1125a1d56debSopenharmony_ci fn ut_json_value_is_boolean() { 1126a1d56debSopenharmony_ci assert!(!JsonValue::new_null().is_boolean()); 1127a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(true).is_boolean()); 1128a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(false).is_boolean()); 1129a1d56debSopenharmony_ci assert!(!JsonValue::new_number(12.34.into()).is_boolean()); 1130a1d56debSopenharmony_ci assert!(!JsonValue::new_string("hello").is_boolean()); 1131a1d56debSopenharmony_ci assert!(!JsonValue::new_array(Array::new()).is_boolean()); 1132a1d56debSopenharmony_ci assert!(!JsonValue::new_object(Object::new()).is_boolean()); 1133a1d56debSopenharmony_ci } 1134a1d56debSopenharmony_ci 1135a1d56debSopenharmony_ci /// UT test for `JsonValue::is_number`. 1136a1d56debSopenharmony_ci /// 1137a1d56debSopenharmony_ci /// # Title 1138a1d56debSopenharmony_ci /// ut_json_value_is_number 1139a1d56debSopenharmony_ci /// 1140a1d56debSopenharmony_ci /// # Brief 1141a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1142a1d56debSopenharmony_ci /// 2. Calls `JsonValue::is_number`. 1143a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1144a1d56debSopenharmony_ci #[test] 1145a1d56debSopenharmony_ci fn ut_json_value_is_number() { 1146a1d56debSopenharmony_ci assert!(!JsonValue::new_null().is_number()); 1147a1d56debSopenharmony_ci assert!(!JsonValue::new_boolean(true).is_number()); 1148a1d56debSopenharmony_ci assert!(!JsonValue::new_boolean(false).is_number()); 1149a1d56debSopenharmony_ci assert!(JsonValue::new_number(12.34.into()).is_number()); 1150a1d56debSopenharmony_ci assert!(!JsonValue::new_string("hello").is_number()); 1151a1d56debSopenharmony_ci assert!(!JsonValue::new_array(Array::new()).is_number()); 1152a1d56debSopenharmony_ci assert!(!JsonValue::new_object(Object::new()).is_number()); 1153a1d56debSopenharmony_ci } 1154a1d56debSopenharmony_ci 1155a1d56debSopenharmony_ci /// UT test for `JsonValue::is_string`. 1156a1d56debSopenharmony_ci /// 1157a1d56debSopenharmony_ci /// # Title 1158a1d56debSopenharmony_ci /// ut_json_value_is_string 1159a1d56debSopenharmony_ci /// 1160a1d56debSopenharmony_ci /// # Brief 1161a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1162a1d56debSopenharmony_ci /// 2. Calls `JsonValue::is_string`. 1163a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1164a1d56debSopenharmony_ci #[test] 1165a1d56debSopenharmony_ci fn ut_json_value_is_string() { 1166a1d56debSopenharmony_ci assert!(!JsonValue::new_null().is_string()); 1167a1d56debSopenharmony_ci assert!(!JsonValue::new_boolean(true).is_string()); 1168a1d56debSopenharmony_ci assert!(!JsonValue::new_boolean(false).is_string()); 1169a1d56debSopenharmony_ci assert!(!JsonValue::new_number(12.34.into()).is_string()); 1170a1d56debSopenharmony_ci assert!(JsonValue::new_string("hello").is_string()); 1171a1d56debSopenharmony_ci assert!(!JsonValue::new_array(Array::new()).is_string()); 1172a1d56debSopenharmony_ci assert!(!JsonValue::new_object(Object::new()).is_string()); 1173a1d56debSopenharmony_ci } 1174a1d56debSopenharmony_ci 1175a1d56debSopenharmony_ci /// UT test for `JsonValue::is_array`. 1176a1d56debSopenharmony_ci /// 1177a1d56debSopenharmony_ci /// # Title 1178a1d56debSopenharmony_ci /// ut_json_value_is_array 1179a1d56debSopenharmony_ci /// 1180a1d56debSopenharmony_ci /// # Brief 1181a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1182a1d56debSopenharmony_ci /// 2. Calls `JsonValue::is_array`. 1183a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1184a1d56debSopenharmony_ci #[test] 1185a1d56debSopenharmony_ci fn ut_json_value_is_array() { 1186a1d56debSopenharmony_ci assert!(!JsonValue::new_null().is_array()); 1187a1d56debSopenharmony_ci assert!(!JsonValue::new_boolean(true).is_array()); 1188a1d56debSopenharmony_ci assert!(!JsonValue::new_boolean(false).is_array()); 1189a1d56debSopenharmony_ci assert!(!JsonValue::new_number(12.34.into()).is_array()); 1190a1d56debSopenharmony_ci assert!(!JsonValue::new_string("hello").is_array()); 1191a1d56debSopenharmony_ci assert!(JsonValue::new_array(Array::new()).is_array()); 1192a1d56debSopenharmony_ci assert!(!JsonValue::new_object(Object::new()).is_array()); 1193a1d56debSopenharmony_ci } 1194a1d56debSopenharmony_ci 1195a1d56debSopenharmony_ci /// UT test for `JsonValue::is_object`. 1196a1d56debSopenharmony_ci /// 1197a1d56debSopenharmony_ci /// # Title 1198a1d56debSopenharmony_ci /// ut_json_value_is_object 1199a1d56debSopenharmony_ci /// 1200a1d56debSopenharmony_ci /// # Brief 1201a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1202a1d56debSopenharmony_ci /// 2. Calls `JsonValue::is_object`. 1203a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1204a1d56debSopenharmony_ci #[test] 1205a1d56debSopenharmony_ci fn ut_json_value_is_object() { 1206a1d56debSopenharmony_ci assert!(!JsonValue::new_null().is_object()); 1207a1d56debSopenharmony_ci assert!(!JsonValue::new_boolean(true).is_object()); 1208a1d56debSopenharmony_ci assert!(!JsonValue::new_boolean(false).is_object()); 1209a1d56debSopenharmony_ci assert!(!JsonValue::new_number(12.34.into()).is_object()); 1210a1d56debSopenharmony_ci assert!(!JsonValue::new_string("hello").is_object()); 1211a1d56debSopenharmony_ci assert!(!JsonValue::new_array(Array::new()).is_object()); 1212a1d56debSopenharmony_ci assert!(JsonValue::new_object(Object::new()).is_object()); 1213a1d56debSopenharmony_ci } 1214a1d56debSopenharmony_ci 1215a1d56debSopenharmony_ci /// UT test for `JsonValue::try_as_boolean`. 1216a1d56debSopenharmony_ci /// 1217a1d56debSopenharmony_ci /// # Title 1218a1d56debSopenharmony_ci /// ut_json_value_try_as_boolean 1219a1d56debSopenharmony_ci /// 1220a1d56debSopenharmony_ci /// # Brief 1221a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1222a1d56debSopenharmony_ci /// 2. Calls `JsonValue::try_as_boolean`. 1223a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1224a1d56debSopenharmony_ci #[test] 1225a1d56debSopenharmony_ci fn ut_json_value_try_as_boolean() { 1226a1d56debSopenharmony_ci assert!(JsonValue::new_null().try_as_boolean().is_err()); 1227a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(true).try_as_boolean().is_ok()); 1228a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(false).try_as_boolean().is_ok()); 1229a1d56debSopenharmony_ci assert!(JsonValue::new_number(12.34.into()) 1230a1d56debSopenharmony_ci .try_as_boolean() 1231a1d56debSopenharmony_ci .is_err()); 1232a1d56debSopenharmony_ci assert!(JsonValue::new_string("hello").try_as_boolean().is_err()); 1233a1d56debSopenharmony_ci assert!(JsonValue::new_array(Array::new()).try_as_boolean().is_err()); 1234a1d56debSopenharmony_ci assert!(JsonValue::new_object(Object::new()) 1235a1d56debSopenharmony_ci .try_as_boolean() 1236a1d56debSopenharmony_ci .is_err()); 1237a1d56debSopenharmony_ci } 1238a1d56debSopenharmony_ci 1239a1d56debSopenharmony_ci /// UT test for `JsonValue::try_as_number`. 1240a1d56debSopenharmony_ci /// 1241a1d56debSopenharmony_ci /// # Title 1242a1d56debSopenharmony_ci /// ut_json_value_try_as_number 1243a1d56debSopenharmony_ci /// 1244a1d56debSopenharmony_ci /// # Brief 1245a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1246a1d56debSopenharmony_ci /// 2. Calls `JsonValue::try_as_number`. 1247a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1248a1d56debSopenharmony_ci #[test] 1249a1d56debSopenharmony_ci fn ut_json_value_try_as_number() { 1250a1d56debSopenharmony_ci assert!(JsonValue::new_null().try_as_number().is_err()); 1251a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(true).try_as_number().is_err()); 1252a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(false).try_as_number().is_err()); 1253a1d56debSopenharmony_ci assert!(JsonValue::new_number(12.34.into()).try_as_number().is_ok()); 1254a1d56debSopenharmony_ci assert!(JsonValue::new_string("hello").try_as_number().is_err()); 1255a1d56debSopenharmony_ci assert!(JsonValue::new_array(Array::new()).try_as_number().is_err()); 1256a1d56debSopenharmony_ci assert!(JsonValue::new_object(Object::new()) 1257a1d56debSopenharmony_ci .try_as_number() 1258a1d56debSopenharmony_ci .is_err()); 1259a1d56debSopenharmony_ci } 1260a1d56debSopenharmony_ci 1261a1d56debSopenharmony_ci /// UT test for `JsonValue::try_as_string`. 1262a1d56debSopenharmony_ci /// 1263a1d56debSopenharmony_ci /// # Title 1264a1d56debSopenharmony_ci /// ut_json_value_try_as_string 1265a1d56debSopenharmony_ci /// 1266a1d56debSopenharmony_ci /// # Brief 1267a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1268a1d56debSopenharmony_ci /// 2. Calls `JsonValue::try_as_string`. 1269a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1270a1d56debSopenharmony_ci #[test] 1271a1d56debSopenharmony_ci fn ut_json_value_try_as_string() { 1272a1d56debSopenharmony_ci assert!(JsonValue::new_null().try_as_string().is_err()); 1273a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(true).try_as_string().is_err()); 1274a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(false).try_as_string().is_err()); 1275a1d56debSopenharmony_ci assert!(JsonValue::new_number(12.34.into()).try_as_string().is_err()); 1276a1d56debSopenharmony_ci assert!(JsonValue::new_string("hello").try_as_string().is_ok()); 1277a1d56debSopenharmony_ci assert!(JsonValue::new_array(Array::new()).try_as_string().is_err()); 1278a1d56debSopenharmony_ci assert!(JsonValue::new_object(Object::new()) 1279a1d56debSopenharmony_ci .try_as_string() 1280a1d56debSopenharmony_ci .is_err()); 1281a1d56debSopenharmony_ci } 1282a1d56debSopenharmony_ci 1283a1d56debSopenharmony_ci /// UT test for `JsonValue::try_as_array`. 1284a1d56debSopenharmony_ci /// 1285a1d56debSopenharmony_ci /// # Title 1286a1d56debSopenharmony_ci /// ut_json_value_try_as_array 1287a1d56debSopenharmony_ci /// 1288a1d56debSopenharmony_ci /// # Brief 1289a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1290a1d56debSopenharmony_ci /// 2. Calls `JsonValue::try_as_array`. 1291a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1292a1d56debSopenharmony_ci #[test] 1293a1d56debSopenharmony_ci fn ut_json_value_try_as_array() { 1294a1d56debSopenharmony_ci assert!(JsonValue::new_null().try_as_array().is_err()); 1295a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(true).try_as_array().is_err()); 1296a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(false).try_as_array().is_err()); 1297a1d56debSopenharmony_ci assert!(JsonValue::new_number(12.34.into()).try_as_array().is_err()); 1298a1d56debSopenharmony_ci assert!(JsonValue::new_string("hello").try_as_array().is_err()); 1299a1d56debSopenharmony_ci assert!(JsonValue::new_array(Array::new()).try_as_array().is_ok()); 1300a1d56debSopenharmony_ci assert!(JsonValue::new_object(Object::new()).try_as_array().is_err()); 1301a1d56debSopenharmony_ci } 1302a1d56debSopenharmony_ci 1303a1d56debSopenharmony_ci /// UT test for `JsonValue::try_as_object`. 1304a1d56debSopenharmony_ci /// 1305a1d56debSopenharmony_ci /// # Title 1306a1d56debSopenharmony_ci /// ut_json_value_try_as_object 1307a1d56debSopenharmony_ci /// 1308a1d56debSopenharmony_ci /// # Brief 1309a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1310a1d56debSopenharmony_ci /// 2. Calls `JsonValue::try_as_object`. 1311a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1312a1d56debSopenharmony_ci #[test] 1313a1d56debSopenharmony_ci fn ut_json_value_try_as_object() { 1314a1d56debSopenharmony_ci assert!(JsonValue::new_null().try_as_object().is_err()); 1315a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(true).try_as_object().is_err()); 1316a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(false).try_as_object().is_err()); 1317a1d56debSopenharmony_ci assert!(JsonValue::new_number(12.34.into()).try_as_object().is_err()); 1318a1d56debSopenharmony_ci assert!(JsonValue::new_string("hello").try_as_object().is_err()); 1319a1d56debSopenharmony_ci assert!(JsonValue::new_array(Array::new()).try_as_object().is_err()); 1320a1d56debSopenharmony_ci assert!(JsonValue::new_object(Object::new()).try_as_object().is_ok()); 1321a1d56debSopenharmony_ci } 1322a1d56debSopenharmony_ci 1323a1d56debSopenharmony_ci /// UT test for `JsonValue::try_as_mut_boolean`. 1324a1d56debSopenharmony_ci /// 1325a1d56debSopenharmony_ci /// # Title 1326a1d56debSopenharmony_ci /// ut_json_value_try_as_mut_boolean 1327a1d56debSopenharmony_ci /// 1328a1d56debSopenharmony_ci /// # Brief 1329a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1330a1d56debSopenharmony_ci /// 2. Calls `JsonValue::try_as_mut_boolean`. 1331a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1332a1d56debSopenharmony_ci #[test] 1333a1d56debSopenharmony_ci fn ut_json_value_try_as_mut_boolean() { 1334a1d56debSopenharmony_ci assert!(JsonValue::new_null().try_as_mut_boolean().is_err()); 1335a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(true).try_as_mut_boolean().is_ok()); 1336a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(false).try_as_mut_boolean().is_ok()); 1337a1d56debSopenharmony_ci assert!(JsonValue::new_number(12.34.into()) 1338a1d56debSopenharmony_ci .try_as_mut_boolean() 1339a1d56debSopenharmony_ci .is_err()); 1340a1d56debSopenharmony_ci assert!(JsonValue::new_string("hello").try_as_mut_boolean().is_err()); 1341a1d56debSopenharmony_ci assert!(JsonValue::new_array(Array::new()) 1342a1d56debSopenharmony_ci .try_as_mut_boolean() 1343a1d56debSopenharmony_ci .is_err()); 1344a1d56debSopenharmony_ci assert!(JsonValue::new_object(Object::new()) 1345a1d56debSopenharmony_ci .try_as_mut_boolean() 1346a1d56debSopenharmony_ci .is_err()); 1347a1d56debSopenharmony_ci } 1348a1d56debSopenharmony_ci 1349a1d56debSopenharmony_ci /// UT test for `JsonValue::try_as_mut_number`. 1350a1d56debSopenharmony_ci /// 1351a1d56debSopenharmony_ci /// # Title 1352a1d56debSopenharmony_ci /// ut_json_value_try_as_mut_number 1353a1d56debSopenharmony_ci /// 1354a1d56debSopenharmony_ci /// # Brief 1355a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1356a1d56debSopenharmony_ci /// 2. Calls `JsonValue::try_as_mut_number`. 1357a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1358a1d56debSopenharmony_ci #[test] 1359a1d56debSopenharmony_ci fn ut_json_value_try_as_mut_number() { 1360a1d56debSopenharmony_ci assert!(JsonValue::new_null().try_as_mut_number().is_err()); 1361a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(true).try_as_mut_number().is_err()); 1362a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(false).try_as_mut_number().is_err()); 1363a1d56debSopenharmony_ci assert!(JsonValue::new_number(12.34.into()) 1364a1d56debSopenharmony_ci .try_as_mut_number() 1365a1d56debSopenharmony_ci .is_ok()); 1366a1d56debSopenharmony_ci assert!(JsonValue::new_string("hello").try_as_mut_number().is_err()); 1367a1d56debSopenharmony_ci assert!(JsonValue::new_array(Array::new()) 1368a1d56debSopenharmony_ci .try_as_mut_number() 1369a1d56debSopenharmony_ci .is_err()); 1370a1d56debSopenharmony_ci assert!(JsonValue::new_object(Object::new()) 1371a1d56debSopenharmony_ci .try_as_mut_number() 1372a1d56debSopenharmony_ci .is_err()); 1373a1d56debSopenharmony_ci } 1374a1d56debSopenharmony_ci 1375a1d56debSopenharmony_ci /// UT test for `JsonValue::try_as_mut_string`. 1376a1d56debSopenharmony_ci /// 1377a1d56debSopenharmony_ci /// # Title 1378a1d56debSopenharmony_ci /// ut_json_value_try_as_mut_string 1379a1d56debSopenharmony_ci /// 1380a1d56debSopenharmony_ci /// # Brief 1381a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1382a1d56debSopenharmony_ci /// 2. Calls `JsonValue::try_as_mut_string`. 1383a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1384a1d56debSopenharmony_ci #[test] 1385a1d56debSopenharmony_ci fn ut_json_value_try_as_mut_string() { 1386a1d56debSopenharmony_ci assert!(JsonValue::new_null().try_as_mut_string().is_err()); 1387a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(true).try_as_mut_string().is_err()); 1388a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(false).try_as_mut_string().is_err()); 1389a1d56debSopenharmony_ci assert!(JsonValue::new_number(12.34.into()) 1390a1d56debSopenharmony_ci .try_as_mut_string() 1391a1d56debSopenharmony_ci .is_err()); 1392a1d56debSopenharmony_ci assert!(JsonValue::new_string("hello").try_as_mut_string().is_ok()); 1393a1d56debSopenharmony_ci assert!(JsonValue::new_array(Array::new()) 1394a1d56debSopenharmony_ci .try_as_mut_string() 1395a1d56debSopenharmony_ci .is_err()); 1396a1d56debSopenharmony_ci assert!(JsonValue::new_object(Object::new()) 1397a1d56debSopenharmony_ci .try_as_mut_string() 1398a1d56debSopenharmony_ci .is_err()); 1399a1d56debSopenharmony_ci } 1400a1d56debSopenharmony_ci 1401a1d56debSopenharmony_ci /// UT test for `JsonValue::try_as_mut_array`. 1402a1d56debSopenharmony_ci /// 1403a1d56debSopenharmony_ci /// # Title 1404a1d56debSopenharmony_ci /// ut_json_value_try_as_mut_array 1405a1d56debSopenharmony_ci /// 1406a1d56debSopenharmony_ci /// # Brief 1407a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1408a1d56debSopenharmony_ci /// 2. Calls `JsonValue::try_as_mut_array`. 1409a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1410a1d56debSopenharmony_ci #[test] 1411a1d56debSopenharmony_ci fn ut_json_value_try_as_mut_array() { 1412a1d56debSopenharmony_ci assert!(JsonValue::new_null().try_as_mut_array().is_err()); 1413a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(true).try_as_mut_array().is_err()); 1414a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(false).try_as_mut_array().is_err()); 1415a1d56debSopenharmony_ci assert!(JsonValue::new_number(12.34.into()) 1416a1d56debSopenharmony_ci .try_as_mut_array() 1417a1d56debSopenharmony_ci .is_err()); 1418a1d56debSopenharmony_ci assert!(JsonValue::new_string("hello").try_as_mut_array().is_err()); 1419a1d56debSopenharmony_ci assert!(JsonValue::new_array(Array::new()) 1420a1d56debSopenharmony_ci .try_as_mut_array() 1421a1d56debSopenharmony_ci .is_ok()); 1422a1d56debSopenharmony_ci assert!(JsonValue::new_object(Object::new()) 1423a1d56debSopenharmony_ci .try_as_mut_array() 1424a1d56debSopenharmony_ci .is_err()); 1425a1d56debSopenharmony_ci } 1426a1d56debSopenharmony_ci 1427a1d56debSopenharmony_ci /// UT test for `JsonValue::try_as_mut_object`. 1428a1d56debSopenharmony_ci /// 1429a1d56debSopenharmony_ci /// # Title 1430a1d56debSopenharmony_ci /// ut_json_value_try_as_mut_object 1431a1d56debSopenharmony_ci /// 1432a1d56debSopenharmony_ci /// # Brief 1433a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1434a1d56debSopenharmony_ci /// 2. Calls `JsonValue::try_as_mut_object`. 1435a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1436a1d56debSopenharmony_ci #[test] 1437a1d56debSopenharmony_ci fn ut_json_value_try_as_mut_object() { 1438a1d56debSopenharmony_ci assert!(JsonValue::new_null().try_as_mut_object().is_err()); 1439a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(true).try_as_mut_object().is_err()); 1440a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(false).try_as_mut_object().is_err()); 1441a1d56debSopenharmony_ci assert!(JsonValue::new_number(12.34.into()) 1442a1d56debSopenharmony_ci .try_as_mut_object() 1443a1d56debSopenharmony_ci .is_err()); 1444a1d56debSopenharmony_ci assert!(JsonValue::new_string("hello").try_as_mut_object().is_err()); 1445a1d56debSopenharmony_ci assert!(JsonValue::new_array(Array::new()) 1446a1d56debSopenharmony_ci .try_as_mut_object() 1447a1d56debSopenharmony_ci .is_err()); 1448a1d56debSopenharmony_ci assert!(JsonValue::new_object(Object::new()) 1449a1d56debSopenharmony_ci .try_as_mut_object() 1450a1d56debSopenharmony_ci .is_ok()); 1451a1d56debSopenharmony_ci } 1452a1d56debSopenharmony_ci 1453a1d56debSopenharmony_ci /// UT test for `JsonValue::try_into_boolean`. 1454a1d56debSopenharmony_ci /// 1455a1d56debSopenharmony_ci /// # Title 1456a1d56debSopenharmony_ci /// ut_json_value_try_into_boolean 1457a1d56debSopenharmony_ci /// 1458a1d56debSopenharmony_ci /// # Brief 1459a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1460a1d56debSopenharmony_ci /// 2. Calls `JsonValue::try_into_boolean`. 1461a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1462a1d56debSopenharmony_ci #[test] 1463a1d56debSopenharmony_ci fn ut_json_value_try_into_boolean() { 1464a1d56debSopenharmony_ci assert!(JsonValue::new_null().try_into_boolean().is_err()); 1465a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(true).try_into_boolean().is_ok()); 1466a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(false).try_into_boolean().is_ok()); 1467a1d56debSopenharmony_ci assert!(JsonValue::new_number(12.34.into()) 1468a1d56debSopenharmony_ci .try_into_boolean() 1469a1d56debSopenharmony_ci .is_err()); 1470a1d56debSopenharmony_ci assert!(JsonValue::new_string("hello").try_into_boolean().is_err()); 1471a1d56debSopenharmony_ci assert!(JsonValue::new_array(Array::new()) 1472a1d56debSopenharmony_ci .try_into_boolean() 1473a1d56debSopenharmony_ci .is_err()); 1474a1d56debSopenharmony_ci assert!(JsonValue::new_object(Object::new()) 1475a1d56debSopenharmony_ci .try_into_boolean() 1476a1d56debSopenharmony_ci .is_err()); 1477a1d56debSopenharmony_ci } 1478a1d56debSopenharmony_ci 1479a1d56debSopenharmony_ci /// UT test for `JsonValue::try_into_number`. 1480a1d56debSopenharmony_ci /// 1481a1d56debSopenharmony_ci /// # Title 1482a1d56debSopenharmony_ci /// ut_json_value_try_into_number 1483a1d56debSopenharmony_ci /// 1484a1d56debSopenharmony_ci /// # Brief 1485a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1486a1d56debSopenharmony_ci /// 2. Calls `JsonValue::try_into_number`. 1487a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1488a1d56debSopenharmony_ci #[test] 1489a1d56debSopenharmony_ci fn ut_json_value_try_into_number() { 1490a1d56debSopenharmony_ci assert!(JsonValue::new_null().try_into_number().is_err()); 1491a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(true).try_into_number().is_err()); 1492a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(false).try_into_number().is_err()); 1493a1d56debSopenharmony_ci assert!(JsonValue::new_number(12.34.into()) 1494a1d56debSopenharmony_ci .try_into_number() 1495a1d56debSopenharmony_ci .is_ok()); 1496a1d56debSopenharmony_ci assert!(JsonValue::new_string("hello").try_into_number().is_err()); 1497a1d56debSopenharmony_ci assert!(JsonValue::new_array(Array::new()) 1498a1d56debSopenharmony_ci .try_into_number() 1499a1d56debSopenharmony_ci .is_err()); 1500a1d56debSopenharmony_ci assert!(JsonValue::new_object(Object::new()) 1501a1d56debSopenharmony_ci .try_into_number() 1502a1d56debSopenharmony_ci .is_err()); 1503a1d56debSopenharmony_ci } 1504a1d56debSopenharmony_ci 1505a1d56debSopenharmony_ci /// UT test for `JsonValue::try_into_string`. 1506a1d56debSopenharmony_ci /// 1507a1d56debSopenharmony_ci /// # Title 1508a1d56debSopenharmony_ci /// ut_json_value_try_into_string 1509a1d56debSopenharmony_ci /// 1510a1d56debSopenharmony_ci /// # Brief 1511a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1512a1d56debSopenharmony_ci /// 2. Calls `JsonValue::try_into_string`. 1513a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1514a1d56debSopenharmony_ci #[test] 1515a1d56debSopenharmony_ci fn ut_json_value_try_into_string() { 1516a1d56debSopenharmony_ci assert!(JsonValue::new_null().try_into_string().is_err()); 1517a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(true).try_into_string().is_err()); 1518a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(false).try_into_string().is_err()); 1519a1d56debSopenharmony_ci assert!(JsonValue::new_number(12.34.into()) 1520a1d56debSopenharmony_ci .try_into_string() 1521a1d56debSopenharmony_ci .is_err()); 1522a1d56debSopenharmony_ci assert!(JsonValue::new_string("hello").try_into_string().is_ok()); 1523a1d56debSopenharmony_ci assert!(JsonValue::new_array(Array::new()) 1524a1d56debSopenharmony_ci .try_into_string() 1525a1d56debSopenharmony_ci .is_err()); 1526a1d56debSopenharmony_ci assert!(JsonValue::new_object(Object::new()) 1527a1d56debSopenharmony_ci .try_into_string() 1528a1d56debSopenharmony_ci .is_err()); 1529a1d56debSopenharmony_ci } 1530a1d56debSopenharmony_ci 1531a1d56debSopenharmony_ci /// UT test for `JsonValue::try_into_array`. 1532a1d56debSopenharmony_ci /// 1533a1d56debSopenharmony_ci /// # Title 1534a1d56debSopenharmony_ci /// ut_json_value_try_into_array 1535a1d56debSopenharmony_ci /// 1536a1d56debSopenharmony_ci /// # Brief 1537a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1538a1d56debSopenharmony_ci /// 2. Calls `JsonValue::try_into_array`. 1539a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1540a1d56debSopenharmony_ci #[test] 1541a1d56debSopenharmony_ci fn ut_json_value_try_into_array() { 1542a1d56debSopenharmony_ci assert!(JsonValue::new_null().try_into_array().is_err()); 1543a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(true).try_into_array().is_err()); 1544a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(false).try_into_array().is_err()); 1545a1d56debSopenharmony_ci assert!(JsonValue::new_number(12.34.into()) 1546a1d56debSopenharmony_ci .try_into_array() 1547a1d56debSopenharmony_ci .is_err()); 1548a1d56debSopenharmony_ci assert!(JsonValue::new_string("hello").try_into_array().is_err()); 1549a1d56debSopenharmony_ci assert!(JsonValue::new_array(Array::new()).try_into_array().is_ok()); 1550a1d56debSopenharmony_ci assert!(JsonValue::new_object(Object::new()) 1551a1d56debSopenharmony_ci .try_into_array() 1552a1d56debSopenharmony_ci .is_err()); 1553a1d56debSopenharmony_ci } 1554a1d56debSopenharmony_ci 1555a1d56debSopenharmony_ci /// UT test for `JsonValue::try_into_object`. 1556a1d56debSopenharmony_ci /// 1557a1d56debSopenharmony_ci /// # Title 1558a1d56debSopenharmony_ci /// ut_json_value_try_into_object 1559a1d56debSopenharmony_ci /// 1560a1d56debSopenharmony_ci /// # Brief 1561a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1562a1d56debSopenharmony_ci /// 2. Calls `JsonValue::try_into_object`. 1563a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1564a1d56debSopenharmony_ci #[test] 1565a1d56debSopenharmony_ci fn ut_json_value_try_into_object() { 1566a1d56debSopenharmony_ci assert!(JsonValue::new_null().try_into_object().is_err()); 1567a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(true).try_into_object().is_err()); 1568a1d56debSopenharmony_ci assert!(JsonValue::new_boolean(false).try_into_object().is_err()); 1569a1d56debSopenharmony_ci assert!(JsonValue::new_number(12.34.into()) 1570a1d56debSopenharmony_ci .try_into_object() 1571a1d56debSopenharmony_ci .is_err()); 1572a1d56debSopenharmony_ci assert!(JsonValue::new_string("hello").try_into_object().is_err()); 1573a1d56debSopenharmony_ci assert!(JsonValue::new_array(Array::new()) 1574a1d56debSopenharmony_ci .try_into_object() 1575a1d56debSopenharmony_ci .is_err()); 1576a1d56debSopenharmony_ci assert!(JsonValue::new_object(Object::new()) 1577a1d56debSopenharmony_ci .try_into_object() 1578a1d56debSopenharmony_ci .is_ok()); 1579a1d56debSopenharmony_ci } 1580a1d56debSopenharmony_ci 1581a1d56debSopenharmony_ci /// UT test for `JsonValue::to_formatted_string`. 1582a1d56debSopenharmony_ci /// 1583a1d56debSopenharmony_ci /// # Title 1584a1d56debSopenharmony_ci /// ut_json_value_to_formatted_string 1585a1d56debSopenharmony_ci /// 1586a1d56debSopenharmony_ci /// # Brief 1587a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1588a1d56debSopenharmony_ci /// 2. Calls `JsonValue::to_formatted_string`. 1589a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1590a1d56debSopenharmony_ci #[test] 1591a1d56debSopenharmony_ci fn ut_json_value_to_formatted_string() { 1592a1d56debSopenharmony_ci assert_eq!( 1593a1d56debSopenharmony_ci JsonValue::new_null().to_formatted_string().unwrap(), 1594a1d56debSopenharmony_ci "null\n" 1595a1d56debSopenharmony_ci ); 1596a1d56debSopenharmony_ci } 1597a1d56debSopenharmony_ci 1598a1d56debSopenharmony_ci /// UT test for `JsonValue::to_compact_string`. 1599a1d56debSopenharmony_ci /// 1600a1d56debSopenharmony_ci /// # Title 1601a1d56debSopenharmony_ci /// ut_json_value_to_compact_string 1602a1d56debSopenharmony_ci /// 1603a1d56debSopenharmony_ci /// # Brief 1604a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1605a1d56debSopenharmony_ci /// 2. Calls `JsonValue::to_compact_string`. 1606a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1607a1d56debSopenharmony_ci #[test] 1608a1d56debSopenharmony_ci fn ut_json_value_to_compact_string() { 1609a1d56debSopenharmony_ci assert_eq!(JsonValue::new_null().to_compact_string().unwrap(), "null"); 1610a1d56debSopenharmony_ci } 1611a1d56debSopenharmony_ci 1612a1d56debSopenharmony_ci /// UT test for `JsonValue::from_str`. 1613a1d56debSopenharmony_ci /// 1614a1d56debSopenharmony_ci /// # Title 1615a1d56debSopenharmony_ci /// ut_json_value_from_str 1616a1d56debSopenharmony_ci /// 1617a1d56debSopenharmony_ci /// # Brief 1618a1d56debSopenharmony_ci /// 1. Calls `JsonValue::from_str` to create a `JsonValue`. 1619a1d56debSopenharmony_ci /// 2. Checks if the test results are correct. 1620a1d56debSopenharmony_ci #[test] 1621a1d56debSopenharmony_ci fn ut_json_value_from_str() { 1622a1d56debSopenharmony_ci assert_eq!(JsonValue::from_str("null").unwrap(), JsonValue::new_null()); 1623a1d56debSopenharmony_ci } 1624a1d56debSopenharmony_ci 1625a1d56debSopenharmony_ci /// UT test for `JsonValue::eq`. 1626a1d56debSopenharmony_ci /// 1627a1d56debSopenharmony_ci /// # Title 1628a1d56debSopenharmony_ci /// ut_json_value_eq 1629a1d56debSopenharmony_ci /// 1630a1d56debSopenharmony_ci /// # Brief 1631a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`s. 1632a1d56debSopenharmony_ci /// 2. Calls `JsonValue::eq`. 1633a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1634a1d56debSopenharmony_ci #[test] 1635a1d56debSopenharmony_ci fn ut_json_value_eq() { 1636a1d56debSopenharmony_ci assert_eq!(JsonValue::new_null(), JsonValue::new_null()); 1637a1d56debSopenharmony_ci assert_eq!(JsonValue::new_boolean(true), JsonValue::new_boolean(true)); 1638a1d56debSopenharmony_ci assert_eq!( 1639a1d56debSopenharmony_ci JsonValue::new_number(1.into()), 1640a1d56debSopenharmony_ci JsonValue::new_number(1.into()) 1641a1d56debSopenharmony_ci ); 1642a1d56debSopenharmony_ci assert_eq!( 1643a1d56debSopenharmony_ci JsonValue::new_string("string"), 1644a1d56debSopenharmony_ci JsonValue::new_string("string") 1645a1d56debSopenharmony_ci ); 1646a1d56debSopenharmony_ci assert_eq!( 1647a1d56debSopenharmony_ci JsonValue::new_array(Array::new()), 1648a1d56debSopenharmony_ci JsonValue::new_array(Array::new()) 1649a1d56debSopenharmony_ci ); 1650a1d56debSopenharmony_ci assert_eq!( 1651a1d56debSopenharmony_ci JsonValue::new_object(Object::new()), 1652a1d56debSopenharmony_ci JsonValue::new_object(Object::new()) 1653a1d56debSopenharmony_ci ); 1654a1d56debSopenharmony_ci assert_ne!(JsonValue::new_null(), JsonValue::new_boolean(true)); 1655a1d56debSopenharmony_ci } 1656a1d56debSopenharmony_ci 1657a1d56debSopenharmony_ci /// UT test for `JsonValue::from`. 1658a1d56debSopenharmony_ci /// 1659a1d56debSopenharmony_ci /// # Title 1660a1d56debSopenharmony_ci /// ut_json_value_from 1661a1d56debSopenharmony_ci /// 1662a1d56debSopenharmony_ci /// # Brief 1663a1d56debSopenharmony_ci /// 1. Calls `JsonValue::from` to create `JsonValue`s. 1664a1d56debSopenharmony_ci /// 2. Checks if the test results are correct. 1665a1d56debSopenharmony_ci #[test] 1666a1d56debSopenharmony_ci fn ut_json_value_from() { 1667a1d56debSopenharmony_ci assert_eq!(JsonValue::from(true), JsonValue::new_boolean(true)); 1668a1d56debSopenharmony_ci assert_eq!(JsonValue::from(false), JsonValue::new_boolean(false)); 1669a1d56debSopenharmony_ci assert_eq!( 1670a1d56debSopenharmony_ci JsonValue::from(Array::new()), 1671a1d56debSopenharmony_ci JsonValue::new_array(Array::new()) 1672a1d56debSopenharmony_ci ); 1673a1d56debSopenharmony_ci assert_eq!( 1674a1d56debSopenharmony_ci JsonValue::from(Object::new()), 1675a1d56debSopenharmony_ci JsonValue::new_object(Object::new()) 1676a1d56debSopenharmony_ci ); 1677a1d56debSopenharmony_ci 1678a1d56debSopenharmony_ci assert_eq!(JsonValue::from(&true), JsonValue::new_boolean(true)); 1679a1d56debSopenharmony_ci assert_eq!(JsonValue::from(&false), JsonValue::new_boolean(false)); 1680a1d56debSopenharmony_ci assert_eq!( 1681a1d56debSopenharmony_ci JsonValue::from(&Array::new()), 1682a1d56debSopenharmony_ci JsonValue::new_array(Array::new()) 1683a1d56debSopenharmony_ci ); 1684a1d56debSopenharmony_ci assert_eq!( 1685a1d56debSopenharmony_ci JsonValue::from(&Object::new()), 1686a1d56debSopenharmony_ci JsonValue::new_object(Object::new()) 1687a1d56debSopenharmony_ci ); 1688a1d56debSopenharmony_ci 1689a1d56debSopenharmony_ci assert_eq!(JsonValue::from(&mut true), JsonValue::new_boolean(true)); 1690a1d56debSopenharmony_ci assert_eq!(JsonValue::from(&mut false), JsonValue::new_boolean(false)); 1691a1d56debSopenharmony_ci assert_eq!( 1692a1d56debSopenharmony_ci JsonValue::from(&mut Array::new()), 1693a1d56debSopenharmony_ci JsonValue::new_array(Array::new()) 1694a1d56debSopenharmony_ci ); 1695a1d56debSopenharmony_ci assert_eq!( 1696a1d56debSopenharmony_ci JsonValue::from(&mut Object::new()), 1697a1d56debSopenharmony_ci JsonValue::new_object(Object::new()) 1698a1d56debSopenharmony_ci ); 1699a1d56debSopenharmony_ci 1700a1d56debSopenharmony_ci #[cfg(not(feature = "c_adapter"))] 1701a1d56debSopenharmony_ci assert_eq!(JsonValue::from(String::new()), JsonValue::new_string("")); 1702a1d56debSopenharmony_ci 1703a1d56debSopenharmony_ci #[cfg(feature = "c_adapter")] 1704a1d56debSopenharmony_ci { 1705a1d56debSopenharmony_ci use std::ffi::CString; 1706a1d56debSopenharmony_ci assert_eq!( 1707a1d56debSopenharmony_ci JsonValue::from(CString::new("").unwrap()), 1708a1d56debSopenharmony_ci JsonValue::new_string("") 1709a1d56debSopenharmony_ci ); 1710a1d56debSopenharmony_ci } 1711a1d56debSopenharmony_ci } 1712a1d56debSopenharmony_ci 1713a1d56debSopenharmony_ci /// UT test for `JsonValue::remove`. 1714a1d56debSopenharmony_ci /// 1715a1d56debSopenharmony_ci /// # Title 1716a1d56debSopenharmony_ci /// ut_json_value_remove 1717a1d56debSopenharmony_ci /// 1718a1d56debSopenharmony_ci /// # Brief 1719a1d56debSopenharmony_ci /// 1. Creates some `JsonValue`. 1720a1d56debSopenharmony_ci /// 2. Calls `JsonValue::remove` on them. 1721a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 1722a1d56debSopenharmony_ci #[test] 1723a1d56debSopenharmony_ci fn ut_json_value_remove() { 1724a1d56debSopenharmony_ci let mut object = JsonValue::new_object( 1725a1d56debSopenharmony_ci object!("key1" => "value1"; "key2" => "value2"; "key3" => "value3"), 1726a1d56debSopenharmony_ci ); 1727a1d56debSopenharmony_ci assert_eq!(object["key1"], JsonValue::new_string("value1")); 1728a1d56debSopenharmony_ci assert_eq!(object["key2"], JsonValue::new_string("value2")); 1729a1d56debSopenharmony_ci assert_eq!(object["key3"], JsonValue::new_string("value3")); 1730a1d56debSopenharmony_ci 1731a1d56debSopenharmony_ci object.remove("key2"); 1732a1d56debSopenharmony_ci assert_eq!(object["key1"], JsonValue::new_string("value1")); 1733a1d56debSopenharmony_ci assert_eq!(object["key2"], JsonValue::new_null()); 1734a1d56debSopenharmony_ci assert_eq!(object["key3"], JsonValue::new_string("value3")); 1735a1d56debSopenharmony_ci 1736a1d56debSopenharmony_ci let mut array = JsonValue::new_array(array!(false, JsonValue::new_null(), 12.34)); 1737a1d56debSopenharmony_ci assert_eq!(array[0], JsonValue::new_boolean(false)); 1738a1d56debSopenharmony_ci assert_eq!(array[1], JsonValue::new_null()); 1739a1d56debSopenharmony_ci assert_eq!(array[2], JsonValue::new_number(12.34.into())); 1740a1d56debSopenharmony_ci 1741a1d56debSopenharmony_ci array.remove(1); 1742a1d56debSopenharmony_ci assert_eq!(array[0], JsonValue::new_boolean(false)); 1743a1d56debSopenharmony_ci assert_eq!(array[1], JsonValue::new_number(12.34.into())); 1744a1d56debSopenharmony_ci assert_eq!(array[2], JsonValue::new_null()); 1745a1d56debSopenharmony_ci } 1746a1d56debSopenharmony_ci 1747a1d56debSopenharmony_ci /// UT test for `JsonValue::from_reader`. 1748a1d56debSopenharmony_ci /// 1749a1d56debSopenharmony_ci /// # Title 1750a1d56debSopenharmony_ci /// ut_json_value_from_reader 1751a1d56debSopenharmony_ci /// 1752a1d56debSopenharmony_ci /// # Brief 1753a1d56debSopenharmony_ci /// 1. Calls `JsonValue::from_reader` to create some `JsonValue`. 1754a1d56debSopenharmony_ci /// 2. Checks if the test results are correct. 1755a1d56debSopenharmony_ci #[test] 1756a1d56debSopenharmony_ci fn ut_json_value_from_reader() { 1757a1d56debSopenharmony_ci struct TestErrorIo; 1758a1d56debSopenharmony_ci 1759a1d56debSopenharmony_ci impl Read for TestErrorIo { 1760a1d56debSopenharmony_ci fn read(&mut self, _buf: &mut [u8]) -> Result<usize> { 1761a1d56debSopenharmony_ci Err(ErrorKind::AddrInUse.into()) 1762a1d56debSopenharmony_ci } 1763a1d56debSopenharmony_ci } 1764a1d56debSopenharmony_ci 1765a1d56debSopenharmony_ci assert!(JsonValue::from_reader(TestErrorIo).is_err()); 1766a1d56debSopenharmony_ci } 1767a1d56debSopenharmony_ci} 1768