:::::::: :::::::: ::: ::: :::::::: :::
:+: :+: :+: :+: :+: :+: :+: :+: :+:
+:+ +:+ +:+ +:+ +:+ +:+ +:+
:#: +#+ +:+ +#+ +:+ +#+ +#+
+#+ +#+# +#+ +#+ +#+ +#+ +#+ +#+
#+# #+# #+# #+# #+#+#+# #+# #+# #+#
######## ######## ### ######## ##########
VCL parser written in Go
Let's say you have a VCL file.
acl purge_ip {
"localhost";
"127.0.0.1";
}
Define a go struct how you what to retrieve the VCL expressions and attributes.
type Root struct {
ACLs []*ACL `vcl:"acl,block"`
}
type ACL struct {
Type string `vcl:"type,label`
Endpoints []string `vcl:",flat"`
}
Then decode your like following.
var r Root
err := vcl.Decode(b, &r)
fmt.Println(r.ACLs[0].Type)
fmt.Println(r.ACLs[0].Endpoints)
$ go run main.go
=> "purge_ip"
=> []string{"localhost","127.0.0.1"}
I am not a VCL master so there may be not supported features.
There are struct tags you can use for you input.
block
: Represents a unit of your block likeacl
,sub
, etc...label
: The label of your block.flat
: Represents a expression fieldcomment
: Get commentsattr
: (Default) Attribute of your block
Release tag will be based on Semantic Versioning 2.0.0.
See the CHANGELOGS.md
I am always welcome for any contributions.
- Raise a Issue.
- Create a PR.
Simple:)
go-vcl is released under the MIT license.
© 2019 KeisukeYamashita.