diff --git a/Sources/JSONParsing/JSON.Array (ext).swift b/Sources/JSONParsing/JSON.Array (ext).swift index e274018..7225b77 100644 --- a/Sources/JSONParsing/JSON.Array (ext).swift +++ b/Sources/JSONParsing/JSON.Array (ext).swift @@ -6,6 +6,14 @@ extension JSON.Array { public init(parsing json: JSON) throws { self.init(try JSON.NodeRule.Array.parse(json.utf8)) } + /// Attempts to parse a JSON array from a raw span + public init(parsing span: RawSpan) throws { + self.init( + try span.withUnsafeBytes { buffer in + try JSON.NodeRule.Array.parse(buffer) + } + ) + } /// Attempts to parse a JSON array from a string. public init(parsing string: String) throws { self.init(try JSON.NodeRule.Array.parse(string.utf8)) diff --git a/Sources/JSONParsing/JSON.Node (ext).swift b/Sources/JSONParsing/JSON.Node (ext).swift index 0e9d11e..cb16d49 100644 --- a/Sources/JSONParsing/JSON.Node (ext).swift +++ b/Sources/JSONParsing/JSON.Node (ext).swift @@ -8,6 +8,13 @@ extension JSON.Node { self = try JSON.RootRule.parse(json.utf8) } /// Attempts to parse a complete JSON message (either an ``Array`` or an + /// ``Object``) from a raw span. + public init(parsing span: RawSpan) throws { + self = try span.withUnsafeBytes { buffer in + try JSON.RootRule.parse(buffer) + } + } + /// Attempts to parse a complete JSON message (either an ``Array`` or an /// ``Object``) from a string. public init(parsing string: String) throws { self = try JSON.RootRule.parse(string.utf8) diff --git a/Sources/JSONParsing/JSON.Object (ext).swift b/Sources/JSONParsing/JSON.Object (ext).swift index 75b8921..be9c782 100644 --- a/Sources/JSONParsing/JSON.Object (ext).swift +++ b/Sources/JSONParsing/JSON.Object (ext).swift @@ -9,6 +9,14 @@ extension JSON.Object { public init(parsing json: JSON) throws { self.init(try JSON.NodeRule.Object.parse(json.utf8)) } + /// Attempts to parse a JSON object from a raw span. + public init(parsing span: RawSpan) throws { + self.init( + try span.withUnsafeBytes { buffer in + try JSON.NodeRule.Object.parse(buffer) + } + ) + } /// Attempts to parse a JSON object from a string. /// /// > Note: