Created
December 25, 2021 19:03
-
-
Save apple-avadhesh/44f2ec3c092b8d38c7230edfd4235640 to your computer and use it in GitHub Desktop.
Test Bitcoin Profile
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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