package cmpSnipper import ( "reflect" "errors" ) func (app *App) SnipExists(funcName string) bool { snipName := app.UpperFirst(funcName) + "Snip" refCls := reflect.ValueOf(app) refMth := refCls.MethodByName(snipName) if !refMth.IsValid() { return false } return true } func (app *App) SnipCall(cmpWbsCli cmpWbsCliStruct, fnName string, ifcII interface{}) (interface{}, error) { snName := app.UpperFirst(fnName) + "Snip" refCls := reflect.ValueOf(app) refMth := refCls.MethodByName(snName) if !refMth.IsValid() { app.Log("Call method \"%s\" not found", snName) return nil, errors.New("Call method not founnd") } app.Log("Call method \"%s\"", snName) ifcIM := map[string]interface{}{ "InputArgument" : ifcII, "HostPort" : cmpWbsCli.HostPort, } refIL := []reflect.Value{ reflect.ValueOf(ifcIM), } refOL := refMth.Call(refIL) infOI := refOL[0].Interface() app.Log("Interface output item %+v", infOI) return infOI, nil } func (app *App) SnipGetCli(parm any) (cmpWbsCliStruct, error) { var err error var cmpWbsCli cmpWbsCliStruct HostPortIfc, err := app.IfcGet(parm.(map[string]interface{}), "HostPort") if err != nil { app.Log("Invalid iterface") return cmpWbsCli, err } HostPort, ok := HostPortIfc.(string) if !ok { app.Log("Invalid string") return cmpWbsCli, errors.New("Can't covert to string") } for _, ii := range app.CliList { if HostPort != ii.HostPort { continue } return ii, nil } return cmpWbsCli, errors.New("Client " + HostPort + " not found") }