@ -1,24 +1,21 @@
package natspec
package natspec
import (
import (
"fmt"
"github.com/obscuren/otto"
"github.com/obscuren/otto"
"io/ioutil"
)
)
type NatSpec struct {
type NatSpec struct {
jsvm * otto . Otto
jsvm * otto . Otto
}
}
func NewNATSpec ( transaction string ) ( self * NatSpec , err error ) {
// TODO: should initialise with abi and userdoc jsons
func NewNATSpec ( ) ( self * NatSpec , err error ) {
self = new ( NatSpec )
self = new ( NatSpec )
self . jsvm = otto . New ( )
self . jsvm = otto . New ( )
code , err := ioutil . ReadFile ( "natspec.js" )
if err != nil {
return
}
_ , err = self . jsvm . Run ( string ( code ) )
_ , err = self . jsvm . Run ( natspecJS )
if err != nil {
if err != nil {
return
return
}
}
@ -27,39 +24,40 @@ func NewNATSpec(transaction string) (self *NatSpec, err error) {
return
return
}
}
self . jsvm . Run ( "var transaction = " + transaction + ";" )
return
}
func ( self * NatSpec ) SetDescription ( desc string ) ( err error ) {
_ , err = self . jsvm . Run ( "var expression = \"" + desc + "\";" )
return
return
}
}
func ( self * NatSpec ) SetABI ( abi string ) ( err error ) {
func ( self * NatSpec ) Notice ( transaction , abi , method , expression string ) ( string , error ) {
var err error
_ , err = self . jsvm . Run ( "var abi = " + abi + ";" )
if _ , err = self . jsvm . Run ( "var transaction = " + transaction + ";" ) ; err != nil {
return
return "" , fmt . Errorf ( "natspec.js error setting transaction: %v" , err )
}
}
func ( self * NatSpec ) SetMethod ( method string ) ( err error ) {
_ , err = self . jsvm . Run ( "var method = '" + method + "';" )
if _ , err = self . jsvm . Run ( "var abi = " + abi + ";" ) ; err != nil {
return
return "" , fmt . Errorf ( "natspec.js error setting abi: %v" , err )
}
}
if _ , err = self . jsvm . Run ( "var method = '" + method + "';" ) ; err != nil {
return "" , fmt . Errorf ( "natspec.js error setting method: %v" , err )
}
func ( self * NatSpec ) Parse ( ) string {
if _ , err = self . jsvm . Run ( "var expression = \"" + expression + "\";" ) ; err != nil {
return "" , fmt . Errorf ( "natspec.js error setting expression: %v" , err )
}
self . jsvm . Run ( "var call = {method: method,abi: abi,transaction: transaction};" )
self . jsvm . Run ( "var call = {method: method,abi: abi,transaction: transaction};" )
value , err := self . jsvm . Run ( "natspec.evaluateExpression(expression, call);" )
value , err := self . jsvm . Run ( "natspec.evaluateExpression(expression, call);" )
if err != nil {
if err != nil {
return err . Error ( )
return "" , fmt . Errorf ( "natspec.js error evaluating expression: %v" , err )
}
evalError := "Natspec evaluation failed, wrong input params"
if value . String ( ) == evalError {
return "" , fmt . Errorf ( "natspec.js error evaluating expression: wrong input params in expression '%s'" , expression )
}
}
return value . String ( )
if len ( value . String ( ) ) == 0 {
return "" , fmt . Errorf ( "natspec.js error evaluating expression" )
}
return value . String ( ) , nil
}
}