Swift Package Index


Robust and performant Swift implementation of RFC6570 URI Template


  • The latest stable release is 2.1.0. Released over 1 year ago.
  • The last commit to master was over 1 year ago.

Swift Version Compatibility

  • 2.1.0 and master
    5.3
    5.2
    5.1
    5.0
    4.2
Full build results

Platform Compatibility

  • 2.1.0 and master
    iOS
    macOS(Intel)
    macOS(ARM)
    Linux
    tvOS
    watchOS
Full build results

URITemplate license GitHub release

Travis Codecov branch

Swift 4.2 CocoaPods compatible Carthage compatible Swift Package Manager compatible

A robust and performant Swift 4.2 implementation of RFC6570 URI Template. Full Level 4 support is provided.

Getting Started

Manual

Static Framework targets are provided for iOS, MacOS, tvOS, and watchOS; integrate them as you normally would.

CocoaPods

Add pod 'ScreamURITemplate', '~> 2.1' to your Podfile

Carthage

Add github "SwiftScream/URITemplate" ~> 2.1 to your Cartfile

For simulator builds you will need to add -fprofile-instr-generate to OTHER_LDFLAGS; device builds will be fine without it This is due to this open issue with carthage: https://github.com/Carthage/Carthage/issues/2363 The alternative would be to disable code coverage 😞

Swift Package Manager

Add .package(url: "https://github.com/SwiftScream/URITemplate.git", from: "2.0.0") to your package.swift dependencies

Usage

Template Processing

let template = try URITemplate(string:"https://api.github.com/repos/{owner}/{repository}/traffic/views")
let variables = ["owner":"SwiftScream", "repository":"URITemplate"]
let urlString = try template.process(variables)
// https://api.github.com/repos/SwiftScream/URITemplate/traffic/views

When Things Go Wrong

Both template initialization and processing can fail; throwing a URITemplate.Error The error cases contain associated values specifying a string reason for the error and the index into the template string that the error occurred.

do {
    _ = try URITemplate(string: "https://api.github.com/repos/{}/{repository}")
} catch URITemplate.Error.malformedTemplate(let position, let reason) {
    // reason = "Empty Variable Name"
    // position = 29th character
}

Get variable names used in a template

let template = try URITemplate(string:"https://api.github.com/repos/{owner}/{repository}/traffic/views")
let variableNames = template.variableNames
// ["owner", "repository"]

Codable Support

URITemplate implements the Codable protocol, enabling easy serialization to or from JSON objects.

struct HALObject : Codable {
    let _links : [String:URITemplate]
}

Tests

The library is tested against the standard test suite, as well as some additional tests for behavior specific to this implementation. It is intended to keep test coverage as high as possible.