package accounts import ( "fmt" "strings" ) type ( Platform string ) const ( Amazon Platform = "amazon" BigCartel Platform = "big_cartel" Ebay Platform = "ebay" Ecwid Platform = "ecwid" Etsy Platform = "Etsy" Shopify Platform = "shopify" SquareOnline Platform = "square_online" Squarespace Platform = "squarespace" Tiktok Platform = "Tiktok" WalmartMarketplace Platform = "walmart_marketplace" Wix Platform = "Wix" WooCommerce Platform = "woo_commerce" Zoho Platform = "zoho" ) var ( allPlatforms = []Platform{ Amazon, BigCartel, Ebay, Ecwid, Etsy, Shopify, SquareOnline, Squarespace, Tiktok, WalmartMarketplace, Wix, WooCommerce, Zoho, } ) func NewPlatform(s string) (Platform, error) { for _, v := range allPlatforms { if strings.ToLower(s) == strings.ToLower(string(v)) { return v, nil } } return "", fmt.Errorf("unrecognized constant: %q", s) } func (p Platform) PrettyPrint() string { switch p { case Etsy: return "Etsy" case Tiktok: return "Tiktok" case Wix: return "Wix" case Ebay: return "Ebay" case WalmartMarketplace: return "Walmart Marketplace" case Amazon: return "Amazon" case BigCartel: return "Big Cartel" case Ecwid: return "Ecwid" case Zoho: return "Zoho" case SquareOnline: return "Square Online" case Squarespace: return "Squarespace" case WooCommerce: return "Woo Commerce" case Shopify: return "Shopify" } return "" } // sql.Scanner implementation func (p *Platform) Scan(src any) error { var s string switch v := src.(type) { case string: s = v case byte: s = string(v) default: return fmt.Errorf("unsupported type: %T: %v", src, src) } dst, err := NewPlatform(s) if err == nil { *p = dst } return err } // sql/driver.Valuer implementation func (p Platform) Value() (any, error) { return string(p), nil }