Skip to content

Commit

Permalink
update: client is at api root (#34)
Browse files Browse the repository at this point in the history
  • Loading branch information
JulianToledano authored Dec 30, 2024
1 parent db5fd58 commit c472f80
Show file tree
Hide file tree
Showing 32 changed files with 130 additions and 124 deletions.
23 changes: 13 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
Coingecko API client for golang.

<p align="center">
<img src="images/goin.png" alt="goingecko" height="200" />
<img src="docs/images/goin.png" alt="goingecko" height="200" />
</p>


Expand Down Expand Up @@ -54,27 +54,30 @@ Coingecko API client for golang.
package main

import (
"context"
"fmt"

"github.com/JulianToledano/goingecko/v3"
"github.com/JulianToledano/goingecko/v3/api"
"github.com/JulianToledano/goingecko/v3/api/coins"
)

func main() {
cgClient := goingecko.NewClient(nil, "")
defer cgClient.Close()
cgClient := api.NewDefaultClient()

data, err := cgClient.CoinsId("bitcoin", true, true, true, false, false, false)
data, err := cgClient.CoinsId(context.Background(), "bitcoin", coins.WithTickers(false))
if err != nil {
fmt.Print("Somethig went wrong...")
return
panic(err)
}
fmt.Printf("Bitcoin price is: %f$", data.MarketData.CurrentPrice.Usd)
}

```
Check dir [examples](examples) for more.

Check dir [examples](docs/examples) for more.

## Todo

- [ ] Implement On Chain Dex Api

## Thanks
This repo is based somehow in [superoo7/go-gecko](https://github.com/superoo7/go-gecko) work.

Image was created with [Gophers](https://github.com/egonelbre/gophers)
7 changes: 3 additions & 4 deletions api/assetPlatforms/assetPlatforms.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,14 @@ import (
"fmt"
"net/url"

"github.com/JulianToledano/goingecko/v3/api"

"github.com/JulianToledano/goingecko/v3/api/assetPlatforms/types"
"github.com/JulianToledano/goingecko/v3/api/internal"
)

// assetPlatformsOption is an interface that extends api.Option to provide
// assetPlatformsOption is an interface that extends internal.Option to provide
// asset platform-specific options
type assetPlatformsOption interface {
api.Option
internal.Option

isAssetPlatformsOption()
}
Expand Down
6 changes: 3 additions & 3 deletions api/categories/categories.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ import (
"fmt"
"net/url"

"github.com/JulianToledano/goingecko/v3/api"
"github.com/JulianToledano/goingecko/v3/api/categories/types"
"github.com/JulianToledano/goingecko/v3/api/internal"
)

// categoriesOption is an interface that extends api.Option to provide
// categoriesOption is an interface that extends internal.Option to provide
// category-specific options
type categoriesOption interface {
api.Option
internal.Option

isCategoryOptions()
}
Expand Down
9 changes: 4 additions & 5 deletions api/client/client.go → api/client.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
package client
package api

import (
"net/http"

"github.com/JulianToledano/goingecko/v3/api"
"github.com/JulianToledano/goingecko/v3/api/assetPlatforms"
"github.com/JulianToledano/goingecko/v3/api/categories"
"github.com/JulianToledano/goingecko/v3/api/coins"
Expand Down Expand Up @@ -59,23 +58,23 @@ type Client struct {
func NewDefaultClient() *Client {
return newClient(
geckohttp.NewClient(geckohttp.WithHttpClient(http.DefaultClient)),
api.BaseURL,
BaseURL,
)
}

// NewDemoApiClient creates a new Client configured for the Demo API with the provided API key and HTTP client
func NewDemoApiClient(apiKey string, c *http.Client) *Client {
return newClient(
geckohttp.NewClient(geckohttp.WithHttpClient(c), geckohttp.WithApiHeaderFn(demoApiHeader(apiKey))),
api.BaseURL,
BaseURL,
)
}

// NewProApiClient creates a new Client configured for the Pro API with the provided API key and HTTP client
func NewProApiClient(apiKey string, c *http.Client) *Client {
return newClient(
geckohttp.NewClient(geckohttp.WithHttpClient(c), geckohttp.WithApiHeaderFn(proApiHeader(apiKey))),
api.ProBaseURL,
ProBaseURL,
)
}

Expand Down
2 changes: 1 addition & 1 deletion api/client/client_test.go → api/client_test.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package client
package api

import (
"context"
Expand Down
4 changes: 2 additions & 2 deletions api/coins/id.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ import (
"net/url"
"strconv"

"github.com/JulianToledano/goingecko/v3/api"
"github.com/JulianToledano/goingecko/v3/api/coins/types"
"github.com/JulianToledano/goingecko/v3/api/internal"
)

// coinsIdOption is specific to the CoinsId function
type coinsIdOption interface {
api.Option
internal.Option
isCoinsIdOption()
}

Expand Down
6 changes: 3 additions & 3 deletions api/coins/id_history.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,18 @@ import (
"context"
"encoding/json"
"fmt"
"github.com/JulianToledano/goingecko/v3/api/internal"
"net/url"
"strconv"

"github.com/JulianToledano/goingecko/v3/api"
"github.com/JulianToledano/goingecko/v3/api/coins/types"
)

// idHistoryOption is an interface that extends api.Option to provide
// idHistoryOption is an interface that extends internal.Option to provide
// specific options for the CoinsIdHistory endpoint. It includes a marker
// method isIdHistoryOption() to ensure type safety for history-specific options.
type idHistoryOption interface {
api.Option
internal.Option
isIdHistoryOption()
}

Expand Down
6 changes: 3 additions & 3 deletions api/coins/id_market_chart.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ import (
"fmt"
"net/url"

"github.com/JulianToledano/goingecko/v3/api"
"github.com/JulianToledano/goingecko/v3/api/internal"
"github.com/JulianToledano/goingecko/v3/api/types"
)

// idMarketChartOption is an interface that extends api.Option to provide
// idMarketChartOption is an interface that extends internal.Option to provide
// specific options for the CoinsIdMarketChart endpoint. It includes a marker
// method isIdMarketChartOptions() to ensure type safety for market chart-specific options.
type idMarketChartOption interface {
api.Option
internal.Option
isIdMarketChartOption()
}

Expand Down
6 changes: 3 additions & 3 deletions api/coins/id_market_chart_range.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ import (
"fmt"
"net/url"

"github.com/JulianToledano/goingecko/v3/api"
"github.com/JulianToledano/goingecko/v3/api/internal"
"github.com/JulianToledano/goingecko/v3/api/types"
)

// idMarketChartRangeOption is an interface that extends api.Option to provide
// idMarketChartRangeOption is an interface that extends internal.Option to provide
// specific options for the CoinsIdMarketChartRange endpoint. It includes a marker
// method isIdMarketChartRangeOption() to ensure type safety for market chart range-specific options.
type idMarketChartRangeOption interface {
api.Option
internal.Option
isIdMarketChartRangeOption()
}

Expand Down
6 changes: 3 additions & 3 deletions api/coins/id_tickers.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@ import (
"net/url"
"strconv"

"github.com/JulianToledano/goingecko/v3/api"
"github.com/JulianToledano/goingecko/v3/api/coins/types"
"github.com/JulianToledano/goingecko/v3/api/internal"
)

// idTickersOption is an interface that extends api.Option to provide
// idTickersOption is an interface that extends internal.Option to provide
// specific options for the CoinsIdTickers endpoint. It includes a marker
// method isCoinsIdTickersOption() to ensure type safety for tickers-specific options.
type idTickersOption interface {
api.Option
internal.Option
isCoinsIdTickersOption()
}

Expand Down
6 changes: 3 additions & 3 deletions api/coins/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@ import (
"net/url"
"strconv"

"github.com/JulianToledano/goingecko/v3/api"
"github.com/JulianToledano/goingecko/v3/api/coins/types"
"github.com/JulianToledano/goingecko/v3/api/internal"
)

// listOption is an interface that extends api.Option to provide
// listOption is an interface that extends internal.Option to provide
// specific options for the CoinsList endpoint. It includes a marker
// method isListOption() to ensure type safety for list-specific options.
type listOption interface {
api.Option
internal.Option
isListOption()
}

Expand Down
6 changes: 3 additions & 3 deletions api/coins/markets.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@ import (
"strconv"
"strings"

"github.com/JulianToledano/goingecko/v3/api"
"github.com/JulianToledano/goingecko/v3/api/coins/types"
"github.com/JulianToledano/goingecko/v3/api/internal"
)

// marketsOption is an interface that extends api.Option to provide
// marketsOption is an interface that extends internal.Option to provide
// specific options for the CoinsMarket endpoint. It includes a marker
// method isCoinsMarketOption() to ensure type safety for market-specific options.
type marketsOption interface {
api.Option
internal.Option
isMarketsOption()
}

Expand Down
6 changes: 3 additions & 3 deletions api/coins/ohlc.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ import (
"fmt"
"net/url"

"github.com/JulianToledano/goingecko/v3/api"
"github.com/JulianToledano/goingecko/v3/api/coins/types"
"github.com/JulianToledano/goingecko/v3/api/internal"
)

// ohlcOption is an interface that extends api.Option to provide
// ohlcOption is an interface that extends internal.Option to provide
// specific options for the CoinsOhlc endpoint. It includes a marker
// method isOhlcOption() to ensure type safety for OHLC-specific options.
type ohlcOption interface {
api.Option
internal.Option
isOhlcOption()
}

Expand Down
6 changes: 3 additions & 3 deletions api/contract/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ package contract
import (
"net/url"

"github.com/JulianToledano/goingecko/v3/api"
"github.com/JulianToledano/goingecko/v3/api/internal"
)

// contractOption is an interface that extends api.Option to provide
// contractOption is an interface that extends internal.Option to provide
// contract-specific market chart options
type contractOption interface {
api.Option
internal.Option

isMarketChartOption()
}
Expand Down
7 changes: 3 additions & 4 deletions api/derivatives/exchanges.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,13 @@ import (
"net/url"
"strconv"

"github.com/JulianToledano/goingecko/v3/api"

"github.com/JulianToledano/goingecko/v3/api/derivatives/types"
"github.com/JulianToledano/goingecko/v3/api/internal"
)

// exchangesOption is an interface that extends api.Option to provide options specific to the derivatives exchanges endpoint.
// exchangesOption is an interface that extends internal.Option to provide options specific to the derivatives exchanges endpoint.
type exchangesOption interface {
api.Option
internal.Option

isExchangesOption()
}
Expand Down
6 changes: 3 additions & 3 deletions api/derivatives/exchanges_by_id.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ import (
"fmt"
"net/url"

"github.com/JulianToledano/goingecko/v3/api"
"github.com/JulianToledano/goingecko/v3/api/derivatives/types"
"github.com/JulianToledano/goingecko/v3/api/internal"
)

// exchangesByIdOption is an interface that extends api.Option to provide options specific to the derivatives exchanges by ID endpoint.
// exchangesByIdOption is an interface that extends internal.Option to provide options specific to the derivatives exchanges by ID endpoint.
type exchangesByIdOption interface {
api.Option
internal.Option

isExchangesByIdOption()
}
Expand Down
12 changes: 7 additions & 5 deletions api/endpoins.go
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
package api

import "fmt"
import (
"github.com/JulianToledano/goingecko/v3/api/internal"
)

var (
// Version represents the CoinGecko API version used by this client
Version = "v3"
Version = internal.Version
// BaseURL is the base URL for the CoinGecko public API
BaseURL = fmt.Sprintf("https://api.coingecko.com/api/%s", Version)
BaseURL = internal.BaseURL
// ProBaseURL is the base URL for the CoinGecko Pro API which requires authentication
ProBaseURL = fmt.Sprintf("https://pro-api.coingecko.com/api/%s", Version)
ProBaseURL = internal.ProBaseURL
)

// GeckoApiVersion returns the version of the CoinGecko API client library
func GeckoApiVersion() string {
return "v3.1.1"
return internal.CoinGeckoAPIVersion
}
6 changes: 3 additions & 3 deletions api/exchanges/exchanges.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ import (
"net/url"
"strconv"

"github.com/JulianToledano/goingecko/v3/api"
"github.com/JulianToledano/goingecko/v3/api/exchanges/types"
"github.com/JulianToledano/goingecko/v3/api/internal"
)

// exchangesOption is an interface that extends api.Option to provide options specific to the exchanges endpoint.
// exchangesOption is an interface that extends internal.Option to provide options specific to the exchanges endpoint.
type exchangesOption interface {
api.Option
internal.Option

isExchangesOptions()
}
Expand Down
7 changes: 3 additions & 4 deletions api/exchanges/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,13 @@ import (
"fmt"
"net/url"

"github.com/JulianToledano/goingecko/v3/api"

"github.com/JulianToledano/goingecko/v3/api/exchanges/types"
"github.com/JulianToledano/goingecko/v3/api/internal"
)

// listOption is an interface that extends api.Option to provide options specific to the exchanges list endpoint.
// listOption is an interface that extends internal.Option to provide options specific to the exchanges list endpoint.
type listOption interface {
api.Option
internal.Option

isListOption()
}
Expand Down
Loading

0 comments on commit c472f80

Please sign in to comment.