1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
use hyper::Url;
use hyper::method::Method;

use request::VoucherifyRequest;
use utils::error::VoucherifyError;

pub struct VoucherDeleteRequest {
    request: VoucherifyRequest,
    app_url: String,

    force: bool,
    voucher_id: String,
}

impl VoucherDeleteRequest {
    pub fn new(request: VoucherifyRequest, voucher_id: &str, app_url: String) -> VoucherDeleteRequest {
        VoucherDeleteRequest {
            request: request,
            app_url: app_url,

            force: false,
            voucher_id: voucher_id.to_string(),
        }
    }

    pub fn force(&mut self, force: bool) -> &mut VoucherDeleteRequest {
        self.force = force;
        self
    }

    pub fn send(&mut self) -> Result<bool, VoucherifyError> {
        let mut url = try!(Url::parse(format!("{}/v1/vouchers/{}",
                                              self.app_url,
                                              self.voucher_id)
            .as_str()));

        if self.force {
            url.query_pairs_mut().append_pair("force", "true");
        }

        let response = try!(self.request.execute(Method::Delete, url));

        if !response.status.is_success() {
            return Err(VoucherifyError::ResponseError("Resource not found".to_string()));
        }

        Ok(true)
    }
}