diff --git a/aur.v b/aur.v index 008e982..74fa9e2 100644 --- a/aur.v +++ b/aur.v @@ -4,7 +4,27 @@ const aur_rpc_url = 'https://aur.archlinux.org/rpc/' pub struct Package { pub: - id u32 [json: ID] - name string [json: Name] - package_base_id u32 [json: PackageBaseID] + id u32 [json: ID] + name string [json: Name] + package_base_id u32 [json: PackageBaseID] + version string [json: Version] + description string [json: Description] + url string [json: URL] + num_votes u32 [json: NumVotes] + popularity f64 [json: Popularity] + out_of_date i64 [json: OutOfDate] + maintainer string [json: Maintainer] + first_submitted i64 [json: FirstSubmitted] + last_modified i64 [json: LastModified] + url_path string [json: URLPath] + groups []string [json: Groups] + depends []string [json: Depends] + make_depends []string [json: MakeDepends] + opt_depends []string [json: OptDepends] + check_depends []string [json: CheckDepends] + conflicts []string [json: Conflicts] + replaces []string [json: Replaces] + provides []string [json: Provides] + license []string [json: License] + keywords []string [json: Keywords] } diff --git a/client.v b/client.v index 9abfb32..0342e35 100644 --- a/client.v +++ b/client.v @@ -5,45 +5,49 @@ import net.http import json pub struct Client { - url string = aur_rpc_url + url string = aur_rpc_url } pub fn new() &Client { - return &Client{} + return &Client{} } pub fn new_with_url(url string) &Client { - if !url.ends_with('/') { - return &Client{url: '$url/'} - } + if !url.ends_with('/') { + return &Client{ + url: '$url/' + } + } - return &Client{url: url} + return &Client{ + url: url + } } struct SuccessResponse { - result_count int [json: resultCount] - results []Package + result_count int [json: resultCount] + results []Package } fn (c Client) request(params map[string]string) ?[]Package { - mut params_escaped := map[string]string{} + mut params_escaped := map[string]string{} - for k, v in params { - params_escaped[k] = urllib.query_escape(v) - } + for k, v in params { + params_escaped[k] = urllib.query_escape(v) + } - params_str := params_escaped.keys().map('$it=${params[it]}').join('&') + params_str := params_escaped.keys().map('$it=${params[it]}').join('&') - url := '$c.url?$params_str' + url := '$c.url?$params_str' - res := http.get(url)? - - if res.status_code < 200 || res.status_code >= 300 { - // temporary - return error('error') - } + res := http.get(url)? - data := json.decode(SuccessResponse, res.body)? + if res.status_code < 200 || res.status_code >= 300 { + // temporary + return error('error') + } - return data.results + data := json.decode(SuccessResponse, res.body)? + + return data.results } diff --git a/search.v b/search.v index 4bc65a9..51e9229 100644 --- a/search.v +++ b/search.v @@ -1,34 +1,39 @@ module aur pub enum SearchType { - name - name_desc - maintainer - depends - make_depends - opt_depends - check_depends + name + name_desc + maintainer + depends + make_depends + opt_depends + check_depends } pub fn (st SearchType) str() string { - return match st { - .name { 'name' } - .name_desc { 'name-desc' } - .maintainer { 'maintainer' } - .depends { 'depends' } - .make_depends { 'makedepends' } - .opt_depends { 'optdepends' } - .check_depends { 'checkdepends' } - } + return match st { + .name { 'name' } + .name_desc { 'name-desc' } + .maintainer { 'maintainer' } + .depends { 'depends' } + .make_depends { 'makedepends' } + .opt_depends { 'optdepends' } + .check_depends { 'checkdepends' } + } } pub fn (c Client) search_by(arg string, st SearchType) ?[]Package { - params := { - 'v': '5' - 'type': 'search' - 'by': '$st' - 'arg': arg - } + params := { + 'v': '5' + 'type': 'search' + 'by': '$st' + 'arg': arg + } - return c.request(params) + return c.request(params) +} + +// search performs a search by name_desc. +pub fn (c Client) search(arg string) ?[]Package { + return c.search_by(arg, .name_desc) }