pub struct CstObject(/* private fields */);Expand description
Object literal that may contain properties (ex. {}, { "prop": 4 }).
Implementations§
Source§impl CstObject
impl CstObject
Sourcepub fn parent(&self) -> Option<CstContainerNode>
pub fn parent(&self) -> Option<CstContainerNode>
Parent of the node.
Returns None if this node has become disconnected from
the tree by being removed.
Sourcepub fn ancestors(&self) -> impl Iterator<Item = CstContainerNode>
pub fn ancestors(&self) -> impl Iterator<Item = CstContainerNode>
An iterator of ancestors of this node.
Sourcepub fn child_index(&self) -> usize
pub fn child_index(&self) -> usize
Current child index of the node within the children of the parent node.
Sourcepub fn previous_sibling(&self) -> Option<CstNode>
pub fn previous_sibling(&self) -> Option<CstNode>
Node that comes before this one that shares the same parent.
Sourcepub fn previous_siblings(&self) -> impl Iterator<Item = CstNode>
pub fn previous_siblings(&self) -> impl Iterator<Item = CstNode>
Siblings coming before this node. This does not include cousins.
Sourcepub fn next_sibling(&self) -> Option<CstNode>
pub fn next_sibling(&self) -> Option<CstNode>
Node that comes after this one that shares the same parent.
Sourcepub fn next_siblings(&self) -> impl Iterator<Item = CstNode>
pub fn next_siblings(&self) -> impl Iterator<Item = CstNode>
Siblings coming after this node. This does not include cousins.
Sourcepub fn indent_text(&self) -> Option<String>
pub fn indent_text(&self) -> Option<String>
Returns the indentation text if it can be determined.
Sourcepub fn has_blank_line_before(&self) -> bool
pub fn has_blank_line_before(&self) -> bool
Whether a blank line separates this node, and the comments written above it, from whatever came before them.
Sourcepub fn trailing_comma(&self) -> Option<CstToken>
pub fn trailing_comma(&self) -> Option<CstToken>
Gets the trailing comma token of the node, if it exists.
Sourcepub fn uses_trailing_commas(&self) -> bool
pub fn uses_trailing_commas(&self) -> bool
Infers if the node or appropriate ancestor uses trailing commas.
Sourcepub fn children_exclude_trivia_and_tokens(&self) -> Vec<CstNode>
pub fn children_exclude_trivia_and_tokens(&self) -> Vec<CstNode>
Children of the current node excluding comments, whitespace, newlines, and tokens.
Sourcepub fn child_at_index(&self, index: usize) -> Option<CstNode>
pub fn child_at_index(&self, index: usize) -> Option<CstNode>
Gets the child at the specified index.
Source§impl CstObject
impl CstObject
Sourcepub fn root_node(&self) -> Option<CstRootNode>
pub fn root_node(&self) -> Option<CstRootNode>
Gets the root node.
Returns None if this node has become disconnected from
the tree by being removed.
Sourcepub fn array_value(&self, name: &str) -> Option<CstArray>
pub fn array_value(&self, name: &str) -> Option<CstArray>
Array property by name.
Returns None if the property doesn’t exist or is not an array.
Sourcepub fn array_value_or_create(&self, name: &str) -> Option<CstArray>
pub fn array_value_or_create(&self, name: &str) -> Option<CstArray>
Ensures a property exists with an array value returning the array.
Returns None if the property value exists, but is not an array.
Note: Use .array_value_or_set(..) to overwrite an existing
non-array property value.
Sourcepub fn array_value_or_set(&self, name: &str) -> CstArray
pub fn array_value_or_set(&self, name: &str) -> CstArray
Ensures a property exists with an array value returning the array.
Note: Use .array_value_or_create(..) to not overwrite an existing
non-array property value.
Sourcepub fn object_value(&self, name: &str) -> Option<CstObject>
pub fn object_value(&self, name: &str) -> Option<CstObject>
Object property by name.
Returns None if the property doesn’t exist or is not an object.
Sourcepub fn object_value_or_create(&self, name: &str) -> Option<CstObject>
pub fn object_value_or_create(&self, name: &str) -> Option<CstObject>
Ensures a property exists with an object value returning the object.
Returns None if the property value exists, but is not an object.
Note: Use .object_value_or_set(..) to overwrite an existing
non-array property value.
Sourcepub fn object_value_or_set(&self, name: &str) -> CstObject
pub fn object_value_or_set(&self, name: &str) -> CstObject
Ensures a property exists with an object value returning the object.
Note: Use .object_value_or_create(..) to not overwrite an existing
non-object property value.
Sourcepub fn get(&self, name: &str) -> Option<CstObjectProp>
pub fn get(&self, name: &str) -> Option<CstObjectProp>
Property by name.
Returns None if the property doesn’t exist.
Sourcepub fn properties(&self) -> Vec<CstObjectProp>
pub fn properties(&self) -> Vec<CstObjectProp>
Properties of the object.
Sourcepub fn append(&self, prop_name: &str, value: CstInputValue) -> CstObjectProp
pub fn append(&self, prop_name: &str, value: CstInputValue) -> CstObjectProp
Appends a property to the object.
Returns the inserted object property.
Sourcepub fn insert(
&self,
index: usize,
prop_name: &str,
value: CstInputValue,
) -> CstObjectProp
pub fn insert( &self, index: usize, prop_name: &str, value: CstInputValue, ) -> CstObjectProp
Inserts a property at the specified index.
Returns the inserted object property.
Sourcepub fn sort_properties(&self) -> PropertySort<'_>
pub fn sort_properties(&self) -> PropertySort<'_>
Sorts the properties of the object.
What was written with a property travels with it: the comments and blank lines above it, and a comment written after it on the same line. Whatever precedes the close brace, and whatever shares the open brace’s line, belongs to no property and stays where it is. Each property gains or loses a comma to suit its new position, and whether the object ends with a trailing comma is preserved.
A blank line under the open brace travels with the property it was written above, and one that would end up there instead is dropped, since a gap there reads as belonging to the object. A line comment that would otherwise comment out what now follows it gains a line break, which can make a single line object span several.
Nothing moves until PropertySort::by or PropertySort::by_key says how to order them.
§Example
use jsonc_parser::ParseOptions;
use jsonc_parser::cst::CstRootNode;
let json_text = r#"{
"b": 2, // written about b
// written about a
"a": 1
}"#;
let root = CstRootNode::parse(json_text, &ParseOptions::default()).unwrap();
let root_obj = root.object_value().unwrap();
root_obj.sort_properties().by_key(|prop| prop.decoded_name());
assert_eq!(root.to_string(), r#"{
// written about a
"a": 1,
"b": 2 // written about b
}"#);Sourcepub fn replace_with(self, replacement: CstInputValue) -> Option<CstNode>
pub fn replace_with(self, replacement: CstInputValue) -> Option<CstNode>
Replaces this node with a new value.
Sourcepub fn set_trailing_commas(&self, mode: TrailingCommaMode)
pub fn set_trailing_commas(&self, mode: TrailingCommaMode)
Ensures this object and all its descendants use trailing commas.
Sourcepub fn ensure_multiline(&self)
pub fn ensure_multiline(&self)
Ensures the object spans multiple lines.
Sourcepub fn to_serde_value(&self) -> Option<Value>
pub fn to_serde_value(&self) -> Option<Value>
Converts a CST object to a serde_json::Value.