A library that provides pattern-matching for paths, for the Go programming language. For example, a path could be a file system path, or a path could be a path from a URL (such as an HTTP or HTTPS based URL).
Go to file
Charles Iliya Krempeaux eb4a553ef2 refactored newPattern() 2019-06-20 23:40:37 -07:00
LICENSE initial commit. still need to create more tests. 2016-02-25 14:59:38 -08:00
README.md renamed patternmatch.Pattern.MatchAndLoad() to patternmatch.Pattern.FindAndLoad() 2019-06-20 21:57:03 -07:00
bad_request.go renamed patternmatch.Pattern.MatchAndLoad() to patternmatch.Pattern.FindAndLoad() 2019-06-20 21:57:03 -07:00
compile.go refactored newPattern() 2019-06-20 23:37:46 -07:00
compile_test.go got rid of Pattern interface, and changed internalPattern struct into public Pattern struct 2019-06-20 23:28:50 -07:00
doc.go renamed patternmatch.Pattern.MatchAndLoad() to patternmatch.Pattern.FindAndLoad() 2019-06-20 21:57:03 -07:00
errors.go refactored newPattern() 2019-06-20 23:40:37 -07:00
example_compile_test.go renamed patternmatch.Pattern.MatchAndLoad() to patternmatch.Pattern.FindAndLoad() 2019-06-20 21:57:03 -07:00
internal_error.go renamed "InternalErrorComplainer" to "InternalError" 2019-06-20 21:35:52 -07:00
not_enough_arguments.go renamed "NotEnoughArgumentsComplainer" to "NotEnoughArgumentsComplainerNotEnoughArguments" 2019-06-20 21:38:36 -07:00
pattern.go refactored newPattern() 2019-06-20 23:37:46 -07:00
pattern_find.go got rid of Pattern interface, and changed internalPattern struct into public Pattern struct 2019-06-20 23:28:50 -07:00
pattern_find_test.go got rid of Pattern interface, and changed internalPattern struct into public Pattern struct 2019-06-20 23:28:50 -07:00
pattern_glob_test.go added pathmatch.Pattern.Glob() 2016-02-25 17:18:58 -08:00
pattern_load.go got rid of Pattern interface, and changed internalPattern struct into public Pattern struct 2019-06-20 23:28:50 -07:00
pattern_load_test.go got rid of Pattern interface, and changed internalPattern struct into public Pattern struct 2019-06-20 23:28:50 -07:00
pattern_syntax_error.go renamed "PatternSyntaxErrorComplainer" to "PatternSyntaxError" 2019-06-20 21:40:30 -07:00
scan_error.go renamed "InternalErrorComplainer" to "InternalError" 2019-06-20 21:35:33 -07:00
set.go renamed "NotEnoughArgumentsComplainer" to "NotEnoughArgumentsComplainerNotEnoughArguments" 2019-06-20 21:38:18 -07:00
set_test.go renamed "NotEnoughArgumentsComplainer" to "NotEnoughArgumentsComplainerNotEnoughArguments" 2019-06-20 21:38:18 -07:00
struct_field_wrong_type.go renamed "BadRequestComplainer" to "BadRequest" 2019-06-20 21:31:53 -07:00
unsupported_argument_type.go renamed "BadRequestComplainer" to "BadRequest" 2019-06-20 21:31:53 -07:00

README.md

go-pathmatch

A library that provides pattern matching for paths, for the Go programming language.

For example, a path could be a file system path, or a path could be a path from a URL (such as an HTTP or HTTPS based URL).

Documention

Online documentation, which includes examples, can be found at: http://godoc.org/github.com/reiver/go-pathmatch

GoDoc

Example Usage

import (
	"github.com/reiver/go-pathmatch"
)

// ...

pattern, err := pathmatch.Compile("/users/{user_id}/vehicles/{vehicle_id}}")
if nil != err {
    //@TODO
}

var userId    string
var vehicleId string

didMatch, err := pattern.Find("/users/bMM_kJFMEV/vehicles/o_bcU.RZGK", &userId, &vehicleId)

if nil != err {
    //@TODO
}

if didMatch {
    fmt.Println("The path matched!")

    fmt.Printf("user_id     = %q \n", userId)     // user_id     = "bMM_kJFMEV"
    fmt.Printf("vehicle_id  = %q \n", vehicleId)  // vehicle_id  = "o_bcU.RZGK"
} else {
    fmt.Println("The patch did not match.")
}

Alternatively:

import (
	"github.com/reiver/go-pathmatch"
)

// ...

pattern, err := pathmatch.Compile("/users/{user_id}/vehicles/{vehicle_id}}")
if nil != err {
    //@TODO
}

data := struct{
	UserId    string `match:"user_id"`
	VehicleId string `match:"vehicle_id"`
}{}

didMatch, err := pattern.FindAndLoad("/users/bMM_kJFMEV/vehicles/o_bcU.RZGK", &data)

if nil != err {
    //@TODO
}

if didMatch {
    fmt.Println("The path matched!")

    fmt.Printf("user_id     = %q \n", data.UserId)     // user_id     = "bMM_kJFMEV"
    fmt.Printf("vehicle_id  = %q \n", data.VehicleId)  // vehicle_id  = "o_bcU.RZGK"
} else {
    fmt.Println("The patch did not match.")
}