init repo
This commit is contained in:
153
vendor/github.com/leodido/go-urn/README.md
generated
vendored
Normal file
153
vendor/github.com/leodido/go-urn/README.md
generated
vendored
Normal file
@@ -0,0 +1,153 @@
|
||||
[](https://app.circleci.com/pipelines/github/leodido/go-urn) [](https://codecov.io/gh/leodido/go-urn) [](https://godoc.org/github.com/leodido/go-urn)
|
||||
|
||||
**A parser for URNs**.
|
||||
|
||||
> As seen on [RFC 2141](https://datatracker.ietf.org/doc/html/rfc2141), [RFC 7643](https://datatracker.ietf.org/doc/html/rfc7643#section-10), and on [RFC 8141](https://datatracker.ietf.org/doc/html/rfc8141).
|
||||
|
||||
[API documentation](https://godoc.org/github.com/leodido/go-urn).
|
||||
|
||||
Starting with version 1.3 this library also supports [RFC 7643 SCIM URNs](https://datatracker.ietf.org/doc/html/rfc7643#section-10).
|
||||
|
||||
Starting with version 1.4 this library also supports [RFC 8141 URNs (2017)](https://datatracker.ietf.org/doc/html/rfc8141).
|
||||
|
||||
## Installation
|
||||
|
||||
```
|
||||
go get github.com/leodido/go-urn
|
||||
```
|
||||
|
||||
## Features
|
||||
|
||||
1. RFC 2141 URNs parsing (default)
|
||||
2. RFC 8141 URNs parsing (supersedes RFC 2141)
|
||||
3. RFC 7643 SCIM URNs parsing
|
||||
4. Normalization as per RFCs
|
||||
5. Lexical equivalence as per RFCs
|
||||
6. Precise, fine-grained errors
|
||||
|
||||
## Performances
|
||||
|
||||
This implementation results to be really fast.
|
||||
|
||||
Usually below 400 ns on my machine<sup>[1](#mymachine)</sup>.
|
||||
|
||||
Notice it also performs, while parsing:
|
||||
|
||||
1. fine-grained and informative erroring
|
||||
2. specific-string normalization
|
||||
|
||||
```
|
||||
ok/00/urn:a:b______________________________________/-10 51372006 109.0 ns/op 275 B/op 3 allocs/op
|
||||
ok/01/URN:foo:a123,456_____________________________/-10 36024072 160.8 ns/op 296 B/op 6 allocs/op
|
||||
ok/02/urn:foo:a123%2C456___________________________/-10 31901007 188.4 ns/op 320 B/op 7 allocs/op
|
||||
ok/03/urn:ietf:params:scim:schemas:core:2.0:User___/-10 22736756 266.6 ns/op 376 B/op 6 allocs/op
|
||||
ok/04/urn:ietf:params:scim:schemas:extension:enterp/-10 18291859 335.2 ns/op 408 B/op 6 allocs/op
|
||||
ok/05/urn:ietf:params:scim:schemas:extension:enterp/-10 15283087 379.4 ns/op 440 B/op 6 allocs/op
|
||||
ok/06/urn:burnout:nss______________________________/-10 39407593 155.1 ns/op 288 B/op 6 allocs/op
|
||||
ok/07/urn:abcdefghilmnopqrstuvzabcdefghilm:x_______/-10 27832718 211.4 ns/op 307 B/op 4 allocs/op
|
||||
ok/08/urn:urnurnurn:urn____________________________/-10 33269596 168.1 ns/op 293 B/op 6 allocs/op
|
||||
ok/09/urn:ciao:!!*_________________________________/-10 41100675 148.8 ns/op 288 B/op 6 allocs/op
|
||||
ok/10/urn:ciao:=@__________________________________/-10 37214253 149.7 ns/op 284 B/op 6 allocs/op
|
||||
ok/11/urn:ciao:@!=%2C(xyz)+a,b.*@g=$_'_____________/-10 26534240 229.8 ns/op 336 B/op 7 allocs/op
|
||||
ok/12/URN:x:abc%1Dz%2F%3az_________________________/-10 28166396 211.8 ns/op 336 B/op 7 allocs/op
|
||||
no/13/URN:---xxx:x_________________________________/-10 23635159 255.6 ns/op 419 B/op 5 allocs/op
|
||||
no/14/urn::colon:nss_______________________________/-10 23594779 258.4 ns/op 419 B/op 5 allocs/op
|
||||
no/15/URN:@,:x_____________________________________/-10 23742535 261.5 ns/op 419 B/op 5 allocs/op
|
||||
no/16/URN:URN:NSS__________________________________/-10 27432714 223.3 ns/op 371 B/op 5 allocs/op
|
||||
no/17/urn:UrN:NSS__________________________________/-10 26922117 224.9 ns/op 371 B/op 5 allocs/op
|
||||
no/18/urn:a:%______________________________________/-10 24926733 224.6 ns/op 371 B/op 5 allocs/op
|
||||
no/19/urn:urn:NSS__________________________________/-10 27652641 220.7 ns/op 371 B/op 5 allocs/op
|
||||
```
|
||||
|
||||
* <a name="mymachine">[1]</a>: Apple M1 Pro
|
||||
|
||||
|
||||
## Example
|
||||
|
||||
For more examples take a look at the [examples file](examples_test.go).
|
||||
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/leodido/go-urn"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var uid = "URN:foo:a123,456"
|
||||
|
||||
// Parse the input string as a RFC 2141 URN only
|
||||
u, e := urn.NewMachine().Parse(uid)
|
||||
if e != nil {
|
||||
fmt.Errorf(err)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println(u.ID)
|
||||
fmt.Println(u.SS)
|
||||
|
||||
// Output:
|
||||
// foo
|
||||
// a123,456
|
||||
}
|
||||
```
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/leodido/go-urn"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var uid = "URN:foo:a123,456"
|
||||
|
||||
// Parse the input string as a RFC 2141 URN only
|
||||
u, ok := urn.Parse([]byte(uid))
|
||||
if !ok {
|
||||
panic("error parsing urn")
|
||||
}
|
||||
|
||||
fmt.Println(u.ID)
|
||||
fmt.Println(u.SS)
|
||||
|
||||
// Output:
|
||||
// foo
|
||||
// a123,456
|
||||
}
|
||||
```
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/leodido/go-urn"
|
||||
)
|
||||
|
||||
func main() {
|
||||
input := "urn:ietf:params:scim:api:messages:2.0:ListResponse"
|
||||
|
||||
// Parsing the input string as a RFC 7643 SCIM URN
|
||||
u, ok := urn.Parse([]byte(input), urn.WithParsingMode(urn.RFC7643Only))
|
||||
if !ok {
|
||||
panic("error parsing urn")
|
||||
}
|
||||
|
||||
fmt.Println(u.IsSCIM())
|
||||
scim := u.SCIM()
|
||||
fmt.Println(scim.Type.String())
|
||||
fmt.Println(scim.Name)
|
||||
fmt.Println(scim.Other)
|
||||
|
||||
// Output:
|
||||
// true
|
||||
// api
|
||||
// messages
|
||||
// 2.0:ListResponse
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user