(ep Endpoint, baseURL string, typedValues map[string]any, isSet map[string]bool)
| 190 | } |
| 191 | |
| 192 | func buildRequest(ep Endpoint, baseURL string, typedValues map[string]any, isSet map[string]bool) (string, []byte, error) { |
| 193 | path := ep.Path |
| 194 | for _, p := range ep.Params { |
| 195 | if p.In != "path" { |
| 196 | continue |
| 197 | } |
| 198 | raw, err := paramValueString(p, typedValues[p.FlagName], isSet[p.FlagName]) |
| 199 | if err != nil { |
| 200 | return "", nil, err |
| 201 | } |
| 202 | if raw == "" { |
| 203 | continue |
| 204 | } |
| 205 | esc := url.PathEscape(raw) |
| 206 | path = strings.ReplaceAll(path, "{"+p.Name+"}", esc) |
| 207 | path = strings.ReplaceAll(path, ":"+p.Name, esc) |
| 208 | } |
| 209 | |
| 210 | u, err := url.Parse(baseURL) |
| 211 | if err != nil { |
| 212 | return "", nil, fmt.Errorf("invalid base url: %w", err) |
| 213 | } |
| 214 | u.Path = strings.TrimRight(u.Path, "/") + path |
| 215 | |
| 216 | q := u.Query() |
| 217 | for _, p := range ep.Params { |
| 218 | if p.In != "query" || !isSet[p.FlagName] { |
| 219 | continue |
| 220 | } |
| 221 | val, err := paramQueryValues(p, typedValues[p.FlagName]) |
| 222 | if err != nil { |
| 223 | return "", nil, err |
| 224 | } |
| 225 | for _, v := range val { |
| 226 | q.Add(p.Name, v) |
| 227 | } |
| 228 | } |
| 229 | u.RawQuery = q.Encode() |
| 230 | |
| 231 | bodyMap := map[string]any{} |
| 232 | rawBody := "" |
| 233 | for _, p := range ep.Params { |
| 234 | if p.In != "body" || !isSet[p.FlagName] { |
| 235 | continue |
| 236 | } |
| 237 | if p.Name == "file" { |
| 238 | s, err := paramValueString(p, typedValues[p.FlagName], true) |
| 239 | if err != nil { |
| 240 | return "", nil, err |
| 241 | } |
| 242 | rawBody = s |
| 243 | continue |
| 244 | } |
| 245 | v, err := paramBodyValue(p, typedValues[p.FlagName]) |
| 246 | if err != nil { |
| 247 | return "", nil, err |
| 248 | } |
| 249 | bodyMap[p.Name] = v |
no test coverage detected