1// Copyright 2018 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package flag_test
6
7import (
8	"flag"
9	"fmt"
10	"net/url"
11)
12
13type URLValue struct {
14	URL *url.URL
15}
16
17func (v URLValue) String() string {
18	if v.URL != nil {
19		return v.URL.String()
20	}
21	return ""
22}
23
24func (v URLValue) Set(s string) error {
25	if u, err := url.Parse(s); err != nil {
26		return err
27	} else {
28		*v.URL = *u
29	}
30	return nil
31}
32
33var u = &url.URL{}
34
35func ExampleValue() {
36	fs := flag.NewFlagSet("ExampleValue", flag.ExitOnError)
37	fs.Var(&URLValue{u}, "url", "URL to parse")
38
39	fs.Parse([]string{"-url", "https://golang.org/pkg/flag/"})
40	fmt.Printf(`{scheme: %q, host: %q, path: %q}`, u.Scheme, u.Host, u.Path)
41
42	// Output:
43	// {scheme: "https", host: "golang.org", path: "/pkg/flag/"}
44}
45