Skip to content

Instantly share code, notes, and snippets.

@apple-avadhesh
Created December 25, 2021 19:03
Show Gist options
  • Save apple-avadhesh/44f2ec3c092b8d38c7230edfd4235640 to your computer and use it in GitHub Desktop.
Save apple-avadhesh/44f2ec3c092b8d38c7230edfd4235640 to your computer and use it in GitHub Desktop.
Test Bitcoin Profile
struct BaseModel : Codable {
let status : Status?
let data : Data?
enum CodingKeys: String, CodingKey {
case status = "status"
case data = "data"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
status = try values.decodeIfPresent(Status.self, forKey: .status)
data = try values.decodeIfPresent(Data.self, forKey: .data)
}
}
struct Status : Codable {
let elapsed : Int?
let timestamp : String?
enum CodingKeys: String, CodingKey {
case elapsed = "elapsed"
case timestamp = "timestamp"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
elapsed = try values.decodeIfPresent(Int.self, forKey: .elapsed)
timestamp = try values.decodeIfPresent(String.self, forKey: .timestamp)
}
}
struct Data : Codable {
let id : String?
let symbol : String?
let name : String?
let slug : String?
let contract_addresses : String?
let _internal_temp_agora_id : String?
let is_verified : Bool?
let tagline : String?
let overview : String?
let background : String?
let technology : String?
let category : String?
let sector : String?
let tag : String?
let sfarScore : Int?
let token_distribution : Token_distribution?
let token_details : Token_details?
let organizations : [Organizations]?
let people : People?
let relevant_resources : [Relevant_resources]?
let consensus_algorithm : String?
enum CodingKeys: String, CodingKey {
case id = "id"
case symbol = "symbol"
case name = "name"
case slug = "slug"
case contract_addresses = "contract_addresses"
case _internal_temp_agora_id = "_internal_temp_agora_id"
case is_verified = "is_verified"
case tagline = "tagline"
case overview = "overview"
case background = "background"
case technology = "technology"
case category = "category"
case sector = "sector"
case tag = "tag"
case sfarScore = "sfarScore"
case token_distribution = "token_distribution"
case token_details = "token_details"
case organizations = "organizations"
case people = "people"
case relevant_resources = "relevant_resources"
case consensus_algorithm = "consensus_algorithm"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
id = try values.decodeIfPresent(String.self, forKey: .id)
symbol = try values.decodeIfPresent(String.self, forKey: .symbol)
name = try values.decodeIfPresent(String.self, forKey: .name)
slug = try values.decodeIfPresent(String.self, forKey: .slug)
contract_addresses = try values.decodeIfPresent(String.self, forKey: .contract_addresses)
_internal_temp_agora_id = try values.decodeIfPresent(String.self, forKey: ._internal_temp_agora_id)
is_verified = try values.decodeIfPresent(Bool.self, forKey: .is_verified)
tagline = try values.decodeIfPresent(String.self, forKey: .tagline)
overview = try values.decodeIfPresent(String.self, forKey: .overview)
background = try values.decodeIfPresent(String.self, forKey: .background)
technology = try values.decodeIfPresent(String.self, forKey: .technology)
category = try values.decodeIfPresent(String.self, forKey: .category)
sector = try values.decodeIfPresent(String.self, forKey: .sector)
tag = try values.decodeIfPresent(String.self, forKey: .tag)
sfarScore = try values.decodeIfPresent(Int.self, forKey: .sfarScore)
token_distribution = try values.decodeIfPresent(Token_distribution.self, forKey: .token_distribution)
token_details = try values.decodeIfPresent(Token_details.self, forKey: .token_details)
organizations = try values.decodeIfPresent([Organizations].self, forKey: .organizations)
people = try values.decodeIfPresent(People.self, forKey: .people)
relevant_resources = try values.decodeIfPresent([Relevant_resources].self, forKey: .relevant_resources)
consensus_algorithm = try values.decodeIfPresent(String.self, forKey: .consensus_algorithm)
}
}
struct People : Codable {
let founding_team : String?
let contributors : [Contributors]?
let investors : String?
let advisors : String?
enum CodingKeys: String, CodingKey {
case founding_team = "founding_team"
case contributors = "contributors"
case investors = "investors"
case advisors = "advisors"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
founding_team = try values.decodeIfPresent(String.self, forKey: .founding_team)
contributors = try values.decodeIfPresent([Contributors].self, forKey: .contributors)
investors = try values.decodeIfPresent(String.self, forKey: .investors)
advisors = try values.decodeIfPresent(String.self, forKey: .advisors)
}
}
struct Contributors : Codable {
let first_name : String?
let last_name : String?
let description : String?
let avatar_url : String?
let twitter : String?
let github : String?
let medium : String?
let linkedin : String?
enum CodingKeys: String, CodingKey {
case first_name = "first_name"
case last_name = "last_name"
case description = "description"
case avatar_url = "avatar_url"
case twitter = "twitter"
case github = "github"
case medium = "medium"
case linkedin = "linkedin"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
first_name = try values.decodeIfPresent(String.self, forKey: .first_name)
last_name = try values.decodeIfPresent(String.self, forKey: .last_name)
description = try values.decodeIfPresent(String.self, forKey: .description)
avatar_url = try values.decodeIfPresent(String.self, forKey: .avatar_url)
twitter = try values.decodeIfPresent(String.self, forKey: .twitter)
github = try values.decodeIfPresent(String.self, forKey: .github)
medium = try values.decodeIfPresent(String.self, forKey: .medium)
linkedin = try values.decodeIfPresent(String.self, forKey: .linkedin)
}
}
struct Organizations : Codable {
let name : String?
let founded_date : String?
let governance : String?
let legal_structure : String?
let jurisdiction : String?
let org_charter : String?
let description : String?
let people_count_estimate : String?
enum CodingKeys: String, CodingKey {
case name = "name"
case founded_date = "founded_date"
case governance = "governance"
case legal_structure = "legal_structure"
case jurisdiction = "jurisdiction"
case org_charter = "org_charter"
case description = "description"
case people_count_estimate = "people_count_estimate"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
name = try values.decodeIfPresent(String.self, forKey: .name)
founded_date = try values.decodeIfPresent(String.self, forKey: .founded_date)
governance = try values.decodeIfPresent(String.self, forKey: .governance)
legal_structure = try values.decodeIfPresent(String.self, forKey: .legal_structure)
jurisdiction = try values.decodeIfPresent(String.self, forKey: .jurisdiction)
org_charter = try values.decodeIfPresent(String.self, forKey: .org_charter)
description = try values.decodeIfPresent(String.self, forKey: .description)
people_count_estimate = try values.decodeIfPresent(String.self, forKey: .people_count_estimate)
}
}
struct Token_details : Codable {
let usage : String?
let type : String?
let sales_rounds : String?
let block_reward : Double?
let targeted_block_time_in_sec : Int?
let on_chain_governance_structure : String?
let is_treasury_decentralized : Bool?
let launch_style : String?
let initial_supply : Int?
let percentage_allocated_to_investors_from_initial_supply : Int?
let percentage_allocated_to_premined_or_airdrops_from_initial_supply : Int?
let percentage_allocated_to_organizations_or_founders_supply : Int?
let mining_algorithm : String?
let next_halving_date : String?
let genesis_block_date : String?
let is_victim_of_51_percent_attack : Bool?
let emission_type_general : String?
let emission_type_precise : String?
let is_capped_supply : Bool?
let max_supply : Double?
enum CodingKeys: String, CodingKey {
case usage = "usage"
case type = "type"
case sales_rounds = "sales_rounds"
case block_reward = "block_reward"
case targeted_block_time_in_sec = "targeted_block_time_in_sec"
case on_chain_governance_structure = "on_chain_governance_structure"
case is_treasury_decentralized = "is_treasury_decentralized"
case launch_style = "launch_style"
case initial_supply = "initial_supply"
case percentage_allocated_to_investors_from_initial_supply = "percentage_allocated_to_investors_from_initial_supply"
case percentage_allocated_to_premined_or_airdrops_from_initial_supply = "percentage_allocated_to_premined_or_airdrops_from_initial_supply"
case percentage_allocated_to_organizations_or_founders_supply = "percentage_allocated_to_organizations_or_founders_supply"
case mining_algorithm = "mining_algorithm"
case next_halving_date = "next_halving_date"
case genesis_block_date = "genesis_block_date"
case is_victim_of_51_percent_attack = "is_victim_of_51_percent_attack"
case emission_type_general = "emission_type_general"
case emission_type_precise = "emission_type_precise"
case is_capped_supply = "is_capped_supply"
case max_supply = "max_supply"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
usage = try values.decodeIfPresent(String.self, forKey: .usage)
type = try values.decodeIfPresent(String.self, forKey: .type)
sales_rounds = try values.decodeIfPresent(String.self, forKey: .sales_rounds)
block_reward = try values.decodeIfPresent(Double.self, forKey: .block_reward)
targeted_block_time_in_sec = try values.decodeIfPresent(Int.self, forKey: .targeted_block_time_in_sec)
on_chain_governance_structure = try values.decodeIfPresent(String.self, forKey: .on_chain_governance_structure)
is_treasury_decentralized = try values.decodeIfPresent(Bool.self, forKey: .is_treasury_decentralized)
launch_style = try values.decodeIfPresent(String.self, forKey: .launch_style)
initial_supply = try values.decodeIfPresent(Int.self, forKey: .initial_supply)
percentage_allocated_to_investors_from_initial_supply = try values.decodeIfPresent(Int.self, forKey: .percentage_allocated_to_investors_from_initial_supply)
percentage_allocated_to_premined_or_airdrops_from_initial_supply = try values.decodeIfPresent(Int.self, forKey: .percentage_allocated_to_premined_or_airdrops_from_initial_supply)
percentage_allocated_to_organizations_or_founders_supply = try values.decodeIfPresent(Int.self, forKey: .percentage_allocated_to_organizations_or_founders_supply)
mining_algorithm = try values.decodeIfPresent(String.self, forKey: .mining_algorithm)
next_halving_date = try values.decodeIfPresent(String.self, forKey: .next_halving_date)
genesis_block_date = try values.decodeIfPresent(String.self, forKey: .genesis_block_date)
is_victim_of_51_percent_attack = try values.decodeIfPresent(Bool.self, forKey: .is_victim_of_51_percent_attack)
emission_type_general = try values.decodeIfPresent(String.self, forKey: .emission_type_general)
emission_type_precise = try values.decodeIfPresent(String.self, forKey: .emission_type_precise)
is_capped_supply = try values.decodeIfPresent(Bool.self, forKey: .is_capped_supply)
max_supply = try values.decodeIfPresent(Double.self, forKey: .max_supply)
}
}
struct Token_distribution : Codable {
let sale_start : String?
let sale_end : String?
let initial_distribution : Int?
let current_supply : String?
let max_supply : Double?
let description : String?
enum CodingKeys: String, CodingKey {
case sale_start = "sale_start"
case sale_end = "sale_end"
case initial_distribution = "initial_distribution"
case current_supply = "current_supply"
case max_supply = "max_supply"
case description = "description"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
sale_start = try values.decodeIfPresent(String.self, forKey: .sale_start)
sale_end = try values.decodeIfPresent(String.self, forKey: .sale_end)
initial_distribution = try values.decodeIfPresent(Int.self, forKey: .initial_distribution)
current_supply = try values.decodeIfPresent(String.self, forKey: .current_supply)
max_supply = try values.decodeIfPresent(Double.self, forKey: .max_supply)
description = try values.decodeIfPresent(String.self, forKey: .description)
}
}
struct Relevant_resources : Codable {
let name : String?
let url : String?
enum CodingKeys: String, CodingKey {
case name = "name"
case url = "url"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
name = try values.decodeIfPresent(String.self, forKey: .name)
url = try values.decodeIfPresent(String.self, forKey: .url)
}
}
func callAPI() {
if let url = URL(string: "https://data.messari.io/api/v1/assets/bitcoin/profile") {
URLSession.shared.dataTask(with: url) { data, response, error in
if let data = data {
do {
let res = try JSONDecoder().decode(BaseModel.self, from: data)
print(res.data)
} catch let error {
print(error)
}
}
}.resume()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment