Skip to content

Commit

Permalink
Finishes CLI main function
Browse files Browse the repository at this point in the history
  • Loading branch information
c4milo committed Dec 21, 2013
1 parent 8e6cad0 commit 666d612
Show file tree
Hide file tree
Showing 4 changed files with 110 additions and 34 deletions.
78 changes: 66 additions & 12 deletions cli.go
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
package main

import (
"fmt"
flags "github.com/jessevdk/go-flags"
"log"
"os"
"sync"
)

const version = "v0.0.1"

var opts struct {
//Verbose []bool `short:"v" long:"verbose" description:"Show verbose debug information"`
Version bool `short:"v" long:"version" description:"Shows gowsdl version"`
Package string `short:"p" long:"package" description:"Package under which code will be generated" default:"main"`
Output string `short:"o" long:"output" description:"Directory where the code will be generated" default:"."`
Version bool `short:"v" long:"version" description:"Shows gowsdl version"`
Package string `short:"p" long:"package" description:"Package under which code will be generated" default:"gowsdl"`
OutputFile string `short:"o" long:"output" description:"File where the generated code will be saved" default:"./myservice.go"`
}

func main() {
Expand All @@ -22,23 +21,78 @@ func main() {
os.Exit(1)
}

logger := log.New(os.Stdout, "🍀 ", 0)

if opts.Version {
fmt.Println(version)
logger.Println(version)
os.Exit(0)
}

if len(args) == 0 {
fmt.Println("WSDL file is required to start the party")
os.Exit(1)
logger.Fatalln("WSDL file is required to start the party")
}

logger := log.New(os.Stdout, "", 0)
if opts.OutputFile == args[0] {
logger.Fatalln("Output file cannot be the same WSDL file")
}

gowsdl, err := NewGoWsdl(args[0], opts.Package, opts.Output, logger)
gowsdl, err := NewGoWsdl(args[0], opts.Package, logger)
if err != nil {
fmt.Println(err)
logger.Println(err)
os.Exit(1)
}

gowsdl.start()
err = gowsdl.Unmarshal()
if err != nil {
logger.Println(err)
os.Exit(1)
}

var types, operations, proxy []byte
var wg sync.WaitGroup

wg.Add(1)
go func() {
defer wg.Done()
var err error

types, err = gowsdl.GenTypes()
if err != nil {
logger.Fatalln(err)
}
}()

wg.Add(1)
go func() {
defer wg.Done()
var err error

operations, err = gowsdl.GenOperations()
if err != nil {
logger.Fatalln(err)
}
}()

wg.Add(1)
go func() {
defer wg.Done()
var err error

proxy, err = gowsdl.GenSoapProxy()
if err != nil {
logger.Fatalln(err)
}
}()

wg.Wait()

fd, err := os.Create(opts.OutputFile)
if err != nil {
logger.Fatalln(err)
}
defer fd.Close()

fd.Write(types)
fd.Write(proxy)
fd.Write(operations)
}
46 changes: 34 additions & 12 deletions gowsdl.go
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
package main

import (
"encoding/xml"
"io/ioutil"
"log"
"os"
"strings"
)

type GoWsdl struct {
file, pkg, output string
logger *log.Logger
file, pkg string
logger *log.Logger
}

func NewGoWsdl(file, pkg, output string, logger *log.Logger) (*GoWsdl, error) {
func NewGoWsdl(file, pkg string, logger *log.Logger) (*GoWsdl, error) {
file = strings.TrimSpace(file)
if file == "" {
logger.Fatalln("WSDL file is required to generate Go proxy")
Expand All @@ -22,25 +24,45 @@ func NewGoWsdl(file, pkg, output string, logger *log.Logger) (*GoWsdl, error) {
pkg = "main"
}

output = strings.TrimSpace(output)
if output == "" {
output = "."
}

if logger == nil {
logger = log.New(os.Stdout, "", 0)
}

log.Println(file)

return &GoWsdl{
file: file,
pkg: pkg,
output: output,
logger: logger,
}, nil
}

func (g *GoWsdl) start() error {
func (g *GoWsdl) Unmarshal() error {
g.logger.Printf("Using %s...\n", g.file)

//URL or local file?
//if URL, download!

data, err := ioutil.ReadFile(g.file)
if err != nil {
return err
}

wsdl := Wsdl{}
err = xml.Unmarshal(data, &wsdl)
if err != nil {
return err
}

return nil
}

func (g *GoWsdl) GenTypes() ([]byte, error) {
return nil, nil
}

func (g *GoWsdl) GenOperations() ([]byte, error) {
return nil, nil
}

func (g *GoWsdl) GenSoapProxy() ([]byte, error) {
return nil, nil
}
4 changes: 2 additions & 2 deletions wsdl.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ type WsdlImport struct {
}

type WsdlType struct {
Doc string `xml:"http://schemas.xmlsoap.org/wsdl/ documentation"`
Schema []*XsdSchema `xml:"http://www.w3.org/2001/XMLSchema schema"`
Doc string `xml:"http://schemas.xmlsoap.org/wsdl/ documentation"`
Schemas []*XsdSchema `xml:"http://www.w3.org/2001/XMLSchema schema"`
}

type WsdlPart struct {
Expand Down
16 changes: 8 additions & 8 deletions wsdl_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ func TestUnmarshal(t *testing.T) {
t.Errorf("incorrect result\ngot: %#v\nwant: %#v", err, nil)
}

for _, pt := range v.PortTypes {
t.Logf("PortType name: %s\n", pt.Name)
for _, o := range pt.Operations {
t.Logf("Operation: %s", o.Name)
}
t.Logf("Total ops: %d\n", len(pt.Operations))
}
// for _, pt := range v.PortTypes {
// t.Logf("PortType name: %s\n", pt.Name)
// for _, o := range pt.Operations {
// t.Logf("Operation: %s", o.Name)
// }
// t.Logf("Total ops: %d\n", len(pt.Operations))
// }

t.Logf("%#v\n", v.Types.Schema[0].Includes)
// t.Logf("%#v\n", v.Types.Schema[0].Includes)
}

0 comments on commit 666d612

Please sign in to comment.