Merge pull request #243 from ABridoux/bugfix/241-missing-xml-values

[#241] Missing xml values
This commit is contained in:
Alexis Bridoux 2021-05-02 10:20:22 +02:00 committed by GitHub
commit c68c14b9a8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 52 additions and 9 deletions

View File

@ -14,12 +14,38 @@ extension ExplorerXML {
try _add(value: .explorerValue(value), at: Slice(path)) try _add(value: .explorerValue(value), at: Slice(path))
} }
/// Add the given `AEXMLElement` value rather than an `ExplorerValue`
public mutating func add(_ element: Element, at path: Path) throws {
if referenceIsShared() { self = copy() }
try _add(value: .explorerXML(ExplorerXML(element: element)), at: Slice(path))
}
/// Add the given `ExplorerXML` value rather than an `ExplorerValue`
public mutating func add(_ explorer: ExplorerXML, at path: Path) throws {
if referenceIsShared() { self = copy() }
try _add(value: .explorerXML(explorer), at: Slice(path))
}
public func adding(_ value: ExplorerValue, at path: Path) throws -> ExplorerXML { public func adding(_ value: ExplorerValue, at path: Path) throws -> ExplorerXML {
var copy = self.copy() var copy = self.copy()
try copy.add(value, at: path) try copy.add(value, at: path)
return copy return copy
} }
/// Add the given `AEXMLElement` value rather than an `ExplorerValue`
public func adding(_ element: Element, at path: Path) throws -> ExplorerXML {
var copy = self.copy()
try copy.add(element, at: path)
return copy
}
/// Add the given `ExplorerXML` value rather than an `ExplorerValue`
public func adding(_ explorerXML: ExplorerXML, at path: Path) throws -> ExplorerXML {
var copy = self.copy()
try copy.add(explorerXML, at: path)
return copy
}
// MARK: General function // MARK: General function
/// Return the value if it should be added to the parent /// Return the value if it should be added to the parent

View File

@ -16,21 +16,33 @@ extension ExplorerXML {
try _set(path: Slice(path), to: .explorerValue(newValue)) try _set(path: Slice(path), to: .explorerValue(newValue))
} }
/// Set the path to the given `AEXMLElement` value rather than an `ExplorerValue`
public mutating func set(_ path: Path, to element: Element) throws {
try _set(path: Slice(path), to: .explorerXML(ExplorerXML(element: element)))
}
/// Set the path to the given `ExplorerXML` value rather than an `ExplorerValue`
public mutating func set(_ path: Path, to explorer: ExplorerXML) throws {
try _set(path: Slice(path), to: .explorerXML(explorer))
}
public func setting(_ path: Path, to newValue: ExplorerValue) throws -> ExplorerXML { public func setting(_ path: Path, to newValue: ExplorerValue) throws -> ExplorerXML {
var modified = copy() var modified = copy()
try modified.set(path, to: newValue) try modified.set(path, to: newValue)
return modified return modified
} }
/// Set the path to the given AEXMLElement rather than an `ExplorerValue` /// Set the path to the given `AEXMLElement` value rather than an `ExplorerValue`
public mutating func set(_ path: Path, to newElement: Element) throws { public func setting(_ path: Path, to element: Element) throws -> ExplorerXML {
try _set(path: Slice(path), to: .xmlElement(newElement)) var modified = copy()
try modified.set(path, to: element)
return modified
} }
/// Set the path to the given AEXMLElement rather than an `ExplorerValue` /// Set the path to the given `ExplorerXML` value rather than an `ExplorerValue`
public func setting(_ path: Path, to newElement: Element) throws -> ExplorerXML { public func setting(_ path: Path, to explorer: ExplorerXML) throws -> ExplorerXML {
var modified = copy() var modified = copy()
try modified.set(path, to: newElement) try modified.set(path, to: explorer)
return modified return modified
} }

View File

@ -31,7 +31,7 @@ public struct ExplorerXML: PathExplorer {
public var int: Int? { element.int } public var int: Int? { element.int }
public var double: Double? { element.double } public var double: Double? { element.double }
@available(*, deprecated) @available(*, deprecated, renamed: "double")
public var real: Double? { element.double } public var real: Double? { element.double }
/// Always `nil` on XML /// Always `nil` on XML
@ -259,7 +259,7 @@ extension ExplorerXML {
func set(value: ValueSetter) { func set(value: ValueSetter) {
switch value { switch value {
case .explorerValue(let value): set(newValue: value) case .explorerValue(let value): set(newValue: value)
case .xmlElement(let element): set(newElement: element) case .explorerXML(let explorer): set(newElement: explorer.element)
} }
} }
@ -306,7 +306,7 @@ extension ExplorerXML {
/// Wrapper to more easily handle setting an ExplorerValue or Element /// Wrapper to more easily handle setting an ExplorerValue or Element
enum ValueSetter { enum ValueSetter {
case explorerValue(ExplorerValue) case explorerValue(ExplorerValue)
case xmlElement(Element) case explorerXML(ExplorerXML)
} }
} }

View File

@ -15,7 +15,9 @@ public struct CodablePathExplorer<Format: CodableFormat>: PathExplorer {
public var string: String? { value.string } public var string: String? { value.string }
public var bool: Bool? { value.bool } public var bool: Bool? { value.bool }
public var int: Int? { value.int } public var int: Int? { value.int }
@available(*, deprecated, renamed: "double")
public var real: Double? { value.real } public var real: Double? { value.real }
public var double: Double? { value.real }
public var data: Data? { value.data } public var data: Data? { value.data }
public func array<T>(of type: T.Type) throws -> [T] where T: ExplorerValueCreatable { try value.array(of: type) } public func array<T>(of type: T.Type) throws -> [T] where T: ExplorerValueCreatable { try value.array(of: type) }
public func dictionary<T>(of type: T.Type) throws -> [String: T] where T: ExplorerValueCreatable { try value.dictionary(of: type) } public func dictionary<T>(of type: T.Type) throws -> [String: T] where T: ExplorerValueCreatable { try value.dictionary(of: type) }

View File

@ -31,6 +31,9 @@ where
/// Non `nil` if the key is of the `Double` type /// Non `nil` if the key is of the `Double` type
var real: Double? { get } var real: Double? { get }
/// Non `nil` if the key is of the `Double` type
var double: Double? { get }
/// Non `nil` if the key is of the `Data` type /// Non `nil` if the key is of the `Data` type
var data: Data? { get } var data: Data? { get }