mirror of https://github.com/dexidp/dex.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.0 KiB
96 lines
2.0 KiB
package main |
|
|
|
import ( |
|
"fmt" |
|
"io" |
|
"os" |
|
|
|
"github.com/coreos/dex/pkg/gendoc" |
|
"github.com/spf13/cobra" |
|
) |
|
|
|
var cmd = &cobra.Command{ |
|
Use: "gendoc", |
|
Short: "Generate documentation from REST specifications.", |
|
Long: `A tool to generate documentation for dex's REST APIs.`, |
|
RunE: gen, |
|
} |
|
|
|
var ( |
|
infile string |
|
outfile string |
|
readFlavor string |
|
writeFlavor string |
|
) |
|
|
|
func init() { |
|
cmd.PersistentFlags().StringVar(&infile, "f", "", "File to read from. If ommitted read from stdin.") |
|
cmd.PersistentFlags().StringVar(&outfile, "o", "", "File to write to. If ommitted write to stdout.") |
|
cmd.PersistentFlags().StringVar(&readFlavor, "r", "googleapi", "Flavor of REST spec to read. Currently only supports 'googleapi'.") |
|
cmd.PersistentFlags().StringVar(&writeFlavor, "w", "markdown", "Flavor of documentation. Currently only supports 'markdown'.") |
|
|
|
} |
|
|
|
func main() { |
|
if err := cmd.Execute(); err != nil { |
|
fmt.Fprintln(os.Stderr, err) |
|
os.Exit(2) |
|
} |
|
} |
|
|
|
func gen(cmd *cobra.Command, args []string) error { |
|
var ( |
|
in io.Reader |
|
out io.Writer |
|
decode func(io.Reader) (gendoc.Document, error) |
|
encode func(gendoc.Document) ([]byte, error) |
|
) |
|
|
|
switch readFlavor { |
|
case "googleapi": |
|
decode = gendoc.ParseGoogleAPI |
|
default: |
|
return fmt.Errorf("unsupported read flavor %q", readFlavor) |
|
} |
|
|
|
switch writeFlavor { |
|
case "markdown": |
|
encode = gendoc.Document.MarshalMarkdown |
|
default: |
|
return fmt.Errorf("unsupported write flavor %q", writeFlavor) |
|
} |
|
|
|
if infile == "" { |
|
in = os.Stdin |
|
} else { |
|
f, err := os.OpenFile(infile, os.O_RDONLY, 0644) |
|
if err != nil { |
|
return err |
|
} |
|
defer f.Close() |
|
in = f |
|
} |
|
|
|
if outfile == "" { |
|
out = os.Stdout |
|
} else { |
|
f, err := os.OpenFile(outfile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) |
|
if err != nil { |
|
return err |
|
} |
|
defer f.Close() |
|
out = f |
|
} |
|
|
|
doc, err := decode(in) |
|
if err != nil { |
|
return fmt.Errorf("failed to decode input: %v", err) |
|
} |
|
data, err := encode(doc) |
|
if err != nil { |
|
return fmt.Errorf("failed to encode document: %v", err) |
|
} |
|
|
|
_, err = out.Write(data) |
|
return err |
|
}
|
|
|