Rūdys yra vienas geriausių pasirinkimų kuriant CLI programas. Pradėkite kurdami pagrindinę kriptovaliutų duomenų gavimo programą.

CLI (komandinės eilutės sąsajos) yra labai svarbi programinės įrangos kūrimui ir sistemų administravimui. CLI yra lengvos teksto programos, kurios siūlo supaprastintą būdą bendrauti su kompiuteriais, kurie yra palankūs tiek kūrėjams, tiek patyrusiems vartotojams įvairiems naudojimo atvejams, įskaitant automatizavimą, scenarijus ir nuotolinį administracija.

Rust populiarėja kuriant CLI programas. Rust siūlo galingas funkcijas, tokias kaip smulkus atminties paskirstymo ir gijų saugos valdymas, atminties sauga, lygiagretumas ir lygiagretumas, kuriuos galite panaudoti kurdami galingas CLI programas. Rust taip pat gali pasigirti klestinčia bibliotekų ir sistemų ekosistema, specialiai pritaikyta CLI programoms kurti.

Darbo pradžia Kurkite CLI programas naudojant Rust

Yra keletas trečiųjų šalių paketų, skirtų CLI programoms kurti Rust, įskaitant Ploti, StructOpt, ir Terminas dėžės. Šiose dėžėse yra funkcijų, kurių reikia norint sukurti šiuolaikinius CLI įrankius.

instagram viewer

Be to, „Rust“ teikia a std:: env crate standartinėje bibliotekoje, kuri suteikia funkcionalumą darbui su aplinkos kintamaisiais ir komandinės eilutės argumentais. The std:: env crate siūlo įvairius metodus ir tipus, skirtus darbui su aplinkomis nepriklausomai nuo platformos.

Naudojant std:: env crate, jūsų „Rust“ programos gali sąveikauti su aplinka ir pritaikyti savo elgesį įvairūs veiksniai, įskaitant aplinkos kintamuosius, komandinės eilutės argumentus ir esamą veikimą katalogas.

Vykdykite šią komandą, kad sukurtumėte naują Rust projektą savo CLI programai su Cargo, Rust paketų valdymo įrankiu:

krovinys naujas crypto_cli

Sužinosite, kaip sukurti CLI programą, kuri iškviečia Coinmarketcap API su Reqwest dėžė, kurioje yra gaminimo funkcijų HTTP užklausos Rust.

Atidaryk savo Krovinys.toml failą ir pridėkite reqwest ir tokio dėžės prie jūsų projekto priklausomybių:

[priklausomybės]
tokio = { versija = "1.15", funkcijos = ["pilna"] }
reqwest = { versija = "0.11", funkcijos = ["json"] }
serde = { versija = "1.0", funkcijos = ["išvesti"] }
serde_json = "1.0"

The tokio crate yra asinchroninė vykdymo biblioteka, kuri sąveikauja su reqwest asinchroniniam programavimui. The serde ir serde_json dėžės padeda JSON serializavimas ir deserializavimas.

Viduje src savo Rust projekto aplanką, sukurkite api.rs ir kli.rs failus, kuriuose įdiegsite API iškvietimą ir CLI funkcijas.

palieskite src/api.rs src/cli.rs

Komanda turėtų sukurti norimus failus jūsų projekto darbo kataloge. Įrašę funkcijas į jiems skirtus failus, kad atskirtumėte problemas, iškviesite funkcijas pagrindinis funkcija jūsų pagrindinis.rs failą.

API užklausų teikimas „CoinMarketCap“ API naudojant „Reqwest“.

CoinMarketCap API leidžia pasiekti ir integruoti kriptovaliutų duomenis į jų programas. API teikia sąrašų, rinkos kainų, mainų informacijos, konvertavimo įrankių, istorinių duomenų ir metaduomenų galutinius taškus.

Kai prisijungiate, galite prisiregistruoti gauti CoinMarketCap paskyrą ir gauti API raktą Coinmarketcap kūrėjo puslapyje. Išsamias instrukcijas ir tarifų ribas taip pat galite rasti dokumentacijoje.

Norėdami pateikti API užklausą /v2/cryptocurrency/quotes/latest galutinis taškas, kuris pateikia naujausią vienos ar kelių kriptovaliutų rinkos kainą, turėsite apibrėžti duomenų, kuriuos norite išgauti iš API, struktūras ir nurodykite atributus su Serde išvestiniu bruožu.

Tada galite pateikti API užklausą galutiniam taškui ir naudoti serde_json dėžutę, kad JSON duomenis būtų galima suskirstyti į struktūrą, kad būtų lengviau atlikti Rust duomenų tipus.

Štai struktūros apibrėžimas kad atgauna id, vardas, simbolis, ir citata nurodytų kriptovaliutų duomenis

#[išvesti (debug, deserialize, serialize)]
struktūraApiResponse {
duomenys: duomenys,
}

#[išvesti (debug, deserialize, serialize)]
struktūraDuomenys {
// Pridėkite laukus, kurių jums reikia iš duomenų objekto
#[serde (pervardyti = "1")]
crypto_1: kriptovaliuta,

#[serde (pervardyti = "2")]
crypto_2: kriptovaliuta,

#[serde (pervardyti = "3")]
crypto_3: kriptovaliuta,

#[serde (pervardyti = "4")]
crypto_4: kriptovaliuta,
}

#[išvesti (debug, deserialize, serialize)]
struktūraKriptovaliuta {
ID: u32,
vardas: Styga,
simbolis: Styga,
// Jei reikia, pridėkite kitus laukus
citata: citata,
}

#[išvesti (debug, deserialize, serialize)]
struktūraCitata {
USD: „CitataDetails“,
}

#[išvesti (debug, deserialize, serialize)]
struktūraCitataDetalės {
kaina: f64,
volume_24h: f64,
// Jei reikia, pridėkite kitus laukus
}

API grąžina duomenis, kurių gali būti daugiau nei jums reikia, bet su serde dėžę, galite nurodyti tikslius jums reikalingus duomenis, kaip parodyta aukščiau.

Dabar galite paprašyti galutinio taško naudodami „Reqwest“, sukurdami naują klientą, kuris pateikia GET užklausą su reikalingais parametrais.

naudoti reqwest:: Klientas;
naudoti reqwest:: Klaida;

pubasyncfnkriptovaliuta() -> Rezultatas {
leisti klientas = Klientas:: naujas();

leisti url = " https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest";

leisti params = [
("id", "1,2,3,4"),
("Paversti", "USD"), // Konvertuoti rinkos vertes į USD
];

leisti atsakymas = client.get (url)
.header(„X-CMC_PRO_API_KEY“, „JŪSŲ API RAKTAS ČIA“)
.query(&params)
.send().laukti?;
;

leisti rezultatas: ApiResponse = serde_json:: from_str(&*response.text().laukti?;).išvynioti();

println!("{:#?}", rezultatas);
Gerai(())
}

The kriptovaliuta funkcija yra tokio įgalinta asinchroninė funkcija, kuri reikalauja galutinio taško su client.get funkciją sukūrę kliento egzempliorių su Klientas:: naujas metodas.

The antraštę funkcijos iškvietimas užklausų kūrimo priemonės egzempliorius paima jūsų API raktą užklausą funkcija paima parametrus ir siųsti funkcija siunčia užklausą.

The kriptovaliuta funkcija deserializuoja JSON atsakymą su serde_json's from_str metodas, kuris paima JSON eilutę.

Galiausiai, kriptovaliuta funkcija išspausdina deserializacijos operacijos rezultatą į konsolę.

CLI argumentų gavimas rūdyje

Jūsų kli.rs failą, importuosite kriptovaliuta funkcija iš api.rs failą ir iškvieskite funkciją, jei vartotojo rūšis „crypto“ kaip argumentą paleisti projektą su krovinių važiavimas komandą.

Štai kaip galite naudoti std:: env funkcija, norint gauti argumentą iš komandinės eilutės:

naudoti std:: env;
naudoti dėžė:: api:: kriptovaliuta;

pubasyncfncli() {
leisti args: Sen<Styga> = env:: args().collect();

jeigu args.len() > 1 && args[1] == "kriptovaliuta" {
kriptovaliuta ().laukti.Unwrap();
} Kitas {
println!("Neteisinga komanda. Naudojimas: cargo run crypto);
}
}

The cli funkcija nuskaito visus argumentus iš komandinės eilutės su env:: args().collect() funkcija. The jei-kitaip teiginys patikrina, ar yra papildomas argumentas „kriptovaliuta“. Jei sąlyginis įvertinimas teisingas, cli funkcija iškviečia kriptovaliuta funkcija; kitaip, cli funkcija atspausdina eilutę į konsolę.

Galiausiai galite paskambinti cli funkcija pagrindinis funkcija. Turite pridėti #[tokio:: pagrindinis] atributas nuo pagrindinis „Rust“ funkcijos negali būti asinchroninės.

mod api;
mod cli;
naudoti dėžė:: cli:: cli;

#[tokio:: pagrindinis]
asyncfnpagrindinis() {
cli ().laukti;
}

The pagrindinis funkcija iškviečia cli funkcija su laukti funkcija, kuri sustabdo vykdymą iki a rezultato Ateitis yra pasirengusi.

Štai paleidimo rezultatas krovinių paleidimo kriptovaliuta komanda:

Rust galite kurti sudėtingas žiniatinklio programas

Rust yra universali programavimo kalba, turinti daugybę naudojimo atvejų ir programų. Galite panaudoti trečiųjų šalių žiniatinklio sistemas, tokias kaip Actix, Rocket ir Warp, kad sukurtumėte žiniatinklio programas „Rust“. Šios sistemos suteikia daugumą funkcijų, reikalingų kuriant šiuolaikines žiniatinklio programas.