| 87 | } |
| 88 | |
| 89 | func run() error { |
| 90 | upstream, err := fetch() |
| 91 | if err != nil { |
| 92 | return xerrors.Errorf("fetch %s: %w", sourceURL, err) |
| 93 | } |
| 94 | rows, err := convert(upstream, supportedProviders) |
| 95 | if err != nil { |
| 96 | return err |
| 97 | } |
| 98 | if err := validate(rows); err != nil { |
| 99 | return err |
| 100 | } |
| 101 | if err := write(os.Stdout, rows); err != nil { |
| 102 | return err |
| 103 | } |
| 104 | _, _ = fmt.Fprintf(os.Stderr, "aibridgepricesgen: wrote %d prices for %d provider(s)\n", len(rows), len(supportedProviders)) |
| 105 | return nil |
| 106 | } |
| 107 | |
| 108 | func fetch() (map[string]upstreamProvider, error) { |
| 109 | ctx, cancel := context.WithTimeout(context.Background(), fetchTimeout) |