2021-01-28 23:25:14 +00:00
|
|
|
package api
|
|
|
|
|
2022-01-28 22:48:40 +00:00
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"encoding/json"
|
|
|
|
|
|
|
|
"github.com/vmihailenco/msgpack/v5"
|
|
|
|
)
|
2021-01-28 23:25:14 +00:00
|
|
|
|
|
|
|
// ExecuteWithArgs a universal method for calling a sequence of other methods
|
|
|
|
// while saving and filtering interim results.
|
|
|
|
//
|
|
|
|
// The Args map variable allows you to retrieve the parameters passed during
|
|
|
|
// the request and avoids code formatting.
|
|
|
|
//
|
2023-03-09 21:48:00 +00:00
|
|
|
// return Args.code; // return parameter "code"
|
|
|
|
// return Args.v; // return parameter "v"
|
2021-01-28 23:25:14 +00:00
|
|
|
//
|
|
|
|
// https://vk.com/dev/execute
|
|
|
|
func (vk *VK) ExecuteWithArgs(code string, params Params, obj interface{}) error {
|
|
|
|
token := vk.getToken()
|
|
|
|
|
|
|
|
reqParams := Params{
|
|
|
|
"code": code,
|
|
|
|
"access_token": token,
|
|
|
|
"v": vk.Version,
|
|
|
|
}
|
|
|
|
|
|
|
|
resp, err := vk.Handler("execute", params, reqParams)
|
2021-12-11 23:05:15 +00:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2021-01-28 23:25:14 +00:00
|
|
|
|
2022-01-28 22:48:40 +00:00
|
|
|
var decoderErr error
|
|
|
|
|
|
|
|
if vk.msgpack {
|
|
|
|
dec := msgpack.NewDecoder(bytes.NewReader(resp.Response))
|
|
|
|
dec.SetCustomStructTag("json")
|
|
|
|
|
|
|
|
decoderErr = dec.Decode(&obj)
|
|
|
|
} else {
|
|
|
|
decoderErr = json.Unmarshal(resp.Response, &obj)
|
|
|
|
}
|
|
|
|
|
|
|
|
if decoderErr != nil {
|
|
|
|
return decoderErr
|
2021-01-28 23:25:14 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if resp.ExecuteErrors != nil {
|
|
|
|
return &resp.ExecuteErrors
|
|
|
|
}
|
|
|
|
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
// Execute a universal method for calling a sequence of other methods while
|
|
|
|
// saving and filtering interim results.
|
|
|
|
//
|
|
|
|
// https://vk.com/dev/execute
|
|
|
|
func (vk *VK) Execute(code string, obj interface{}) error {
|
|
|
|
return vk.ExecuteWithArgs(code, Params{}, obj)
|
|
|
|
}
|
|
|
|
|
|
|
|
func fmtBool(value bool) string {
|
|
|
|
if value {
|
|
|
|
return "1"
|
|
|
|
}
|
|
|
|
|
|
|
|
return "0"
|
|
|
|
}
|