pipedrive_rs/apis/
leads_api.rs

1/*
2 * Pipedrive API v1
3 *
4 * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
5 *
6 * The version of the OpenAPI document: 1.0.0
7 * 
8 * Generated by: https://openapi-generator.tech
9 */
10
11
12use reqwest;
13
14use crate::apis::ResponseContent;
15use super::{Error, configuration};
16
17
18/// struct for typed errors of method [`add_lead`]
19#[derive(Debug, Clone, Serialize, Deserialize)]
20#[serde(untagged)]
21pub enum AddLeadError {
22    UnknownValue(serde_json::Value),
23}
24
25/// struct for typed errors of method [`delete_lead`]
26#[derive(Debug, Clone, Serialize, Deserialize)]
27#[serde(untagged)]
28pub enum DeleteLeadError {
29    Status404(crate::models::LeadResponse404),
30    UnknownValue(serde_json::Value),
31}
32
33/// struct for typed errors of method [`get_lead`]
34#[derive(Debug, Clone, Serialize, Deserialize)]
35#[serde(untagged)]
36pub enum GetLeadError {
37    Status404(crate::models::LeadResponse404),
38    UnknownValue(serde_json::Value),
39}
40
41/// struct for typed errors of method [`get_lead_users`]
42#[derive(Debug, Clone, Serialize, Deserialize)]
43#[serde(untagged)]
44pub enum GetLeadUsersError {
45    UnknownValue(serde_json::Value),
46}
47
48/// struct for typed errors of method [`get_leads`]
49#[derive(Debug, Clone, Serialize, Deserialize)]
50#[serde(untagged)]
51pub enum GetLeadsError {
52    UnknownValue(serde_json::Value),
53}
54
55/// struct for typed errors of method [`search_leads`]
56#[derive(Debug, Clone, Serialize, Deserialize)]
57#[serde(untagged)]
58pub enum SearchLeadsError {
59    UnknownValue(serde_json::Value),
60}
61
62/// struct for typed errors of method [`update_lead`]
63#[derive(Debug, Clone, Serialize, Deserialize)]
64#[serde(untagged)]
65pub enum UpdateLeadError {
66    Status404(crate::models::LeadResponse404),
67    UnknownValue(serde_json::Value),
68}
69
70
71/// Creates a lead. A lead always has to be linked to a person or an organization or both. All leads created through the Pipedrive API will have a lead source `API` assigned. Here's the tutorial for <a href=\"https://pipedrive.readme.io/docs/adding-a-lead\" target=\"_blank\" rel=\"noopener noreferrer\">adding a lead</a>. If a lead contains custom fields, the fields' values will be included in the response in the same format as with the `Deals` endpoints. If a custom field's value hasn't been set for the lead, it won't appear in the response. Please note that leads do not have a separate set of custom fields, instead they inherit the custom fields' structure from deals. See an example given in the <a href=\"https://pipedrive.readme.io/docs/updating-custom-field-value\" target=\"_blank\" rel=\"noopener noreferrer\">updating custom fields' values tutorial</a>.
72pub async fn add_lead(configuration: &configuration::Configuration, add_lead_request: Option<crate::models::AddLeadRequest>) -> Result<crate::models::OneLeadResponse200, Error<AddLeadError>> {
73    let local_var_configuration = configuration;
74
75    let local_var_client = &local_var_configuration.client;
76
77    let local_var_uri_str = format!("{}/leads", local_var_configuration.base_path);
78    let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
79
80    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
81        let local_var_key = local_var_apikey.key.clone();
82        let local_var_value = match local_var_apikey.prefix {
83            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
84            None => local_var_key,
85        };
86        local_var_req_builder = local_var_req_builder.query(&[("api_token", local_var_value)]);
87    }
88    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
89        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
90    }
91    if let Some(ref local_var_token) = local_var_configuration.oauth_access_token {
92        local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned());
93    };
94    local_var_req_builder = local_var_req_builder.json(&add_lead_request);
95
96    let local_var_req = local_var_req_builder.build()?;
97    let local_var_resp = local_var_client.execute(local_var_req).await?;
98
99    let local_var_status = local_var_resp.status();
100    let local_var_content = local_var_resp.text().await?;
101
102    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
103        serde_json::from_str(&local_var_content).map_err(Error::from)
104    } else {
105        let local_var_entity: Option<AddLeadError> = serde_json::from_str(&local_var_content).ok();
106        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
107        Err(Error::ResponseError(local_var_error))
108    }
109}
110
111/// Deletes a specific lead.
112pub async fn delete_lead(configuration: &configuration::Configuration, id: &str) -> Result<crate::models::LeadIdResponse200, Error<DeleteLeadError>> {
113    let local_var_configuration = configuration;
114
115    let local_var_client = &local_var_configuration.client;
116
117    let local_var_uri_str = format!("{}/leads/{id}", local_var_configuration.base_path, id=crate::apis::urlencode(id));
118    let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str());
119
120    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
121        let local_var_key = local_var_apikey.key.clone();
122        let local_var_value = match local_var_apikey.prefix {
123            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
124            None => local_var_key,
125        };
126        local_var_req_builder = local_var_req_builder.query(&[("api_token", local_var_value)]);
127    }
128    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
129        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
130    }
131    if let Some(ref local_var_token) = local_var_configuration.oauth_access_token {
132        local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned());
133    };
134
135    let local_var_req = local_var_req_builder.build()?;
136    let local_var_resp = local_var_client.execute(local_var_req).await?;
137
138    let local_var_status = local_var_resp.status();
139    let local_var_content = local_var_resp.text().await?;
140
141    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
142        serde_json::from_str(&local_var_content).map_err(Error::from)
143    } else {
144        let local_var_entity: Option<DeleteLeadError> = serde_json::from_str(&local_var_content).ok();
145        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
146        Err(Error::ResponseError(local_var_error))
147    }
148}
149
150/// Returns details of a specific lead. If a lead contains custom fields, the fields' values will be included in the response in the same format as with the `Deals` endpoints. If a custom field's value hasn't been set for the lead, it won't appear in the response. Please note that leads do not have a separate set of custom fields, instead they inherit the custom fields’ structure from deals.
151pub async fn get_lead(configuration: &configuration::Configuration, id: &str) -> Result<crate::models::OneLeadResponse200, Error<GetLeadError>> {
152    let local_var_configuration = configuration;
153
154    let local_var_client = &local_var_configuration.client;
155
156    let local_var_uri_str = format!("{}/leads/{id}", local_var_configuration.base_path, id=crate::apis::urlencode(id));
157    let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
158
159    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
160        let local_var_key = local_var_apikey.key.clone();
161        let local_var_value = match local_var_apikey.prefix {
162            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
163            None => local_var_key,
164        };
165        local_var_req_builder = local_var_req_builder.query(&[("api_token", local_var_value)]);
166    }
167    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
168        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
169    }
170    if let Some(ref local_var_token) = local_var_configuration.oauth_access_token {
171        local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned());
172    };
173
174    let local_var_req = local_var_req_builder.build()?;
175    let local_var_resp = local_var_client.execute(local_var_req).await?;
176
177    let local_var_status = local_var_resp.status();
178    let local_var_content = local_var_resp.text().await?;
179
180    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
181        serde_json::from_str(&local_var_content).map_err(Error::from)
182    } else {
183        let local_var_entity: Option<GetLeadError> = serde_json::from_str(&local_var_content).ok();
184        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
185        Err(Error::ResponseError(local_var_error))
186    }
187}
188
189/// Lists the users permitted to access a lead.
190pub async fn get_lead_users(configuration: &configuration::Configuration, id: &str) -> Result<crate::models::UserIds, Error<GetLeadUsersError>> {
191    let local_var_configuration = configuration;
192
193    let local_var_client = &local_var_configuration.client;
194
195    let local_var_uri_str = format!("{}/leads/{id}/permittedUsers", local_var_configuration.base_path, id=crate::apis::urlencode(id));
196    let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
197
198    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
199        let local_var_key = local_var_apikey.key.clone();
200        let local_var_value = match local_var_apikey.prefix {
201            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
202            None => local_var_key,
203        };
204        local_var_req_builder = local_var_req_builder.query(&[("api_token", local_var_value)]);
205    }
206    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
207        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
208    }
209
210    let local_var_req = local_var_req_builder.build()?;
211    let local_var_resp = local_var_client.execute(local_var_req).await?;
212
213    let local_var_status = local_var_resp.status();
214    let local_var_content = local_var_resp.text().await?;
215
216    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
217        serde_json::from_str(&local_var_content).map_err(Error::from)
218    } else {
219        let local_var_entity: Option<GetLeadUsersError> = serde_json::from_str(&local_var_content).ok();
220        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
221        Err(Error::ResponseError(local_var_error))
222    }
223}
224
225/// Returns multiple leads. Leads are sorted by the time they were created, from oldest to newest. Pagination can be controlled using `limit` and `start` query parameters. If a lead contains custom fields, the fields' values will be included in the response in the same format as with the `Deals` endpoints. If a custom field's value hasn't been set for the lead, it won't appear in the response. Please note that leads do not have a separate set of custom fields, instead they inherit the custom fields' structure from deals. 
226pub async fn get_leads(configuration: &configuration::Configuration, limit: Option<i32>, start: Option<i32>, archived_status: Option<&str>, owner_id: Option<i32>, person_id: Option<i32>, organization_id: Option<i32>, filter_id: Option<i32>, sort: Option<&str>) -> Result<crate::models::GetLeadsResponse200, Error<GetLeadsError>> {
227    let local_var_configuration = configuration;
228
229    let local_var_client = &local_var_configuration.client;
230
231    let local_var_uri_str = format!("{}/leads", local_var_configuration.base_path);
232    let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
233
234    if let Some(ref local_var_str) = limit {
235        local_var_req_builder = local_var_req_builder.query(&[("limit", &local_var_str.to_string())]);
236    }
237    if let Some(ref local_var_str) = start {
238        local_var_req_builder = local_var_req_builder.query(&[("start", &local_var_str.to_string())]);
239    }
240    if let Some(ref local_var_str) = archived_status {
241        local_var_req_builder = local_var_req_builder.query(&[("archived_status", &local_var_str.to_string())]);
242    }
243    if let Some(ref local_var_str) = owner_id {
244        local_var_req_builder = local_var_req_builder.query(&[("owner_id", &local_var_str.to_string())]);
245    }
246    if let Some(ref local_var_str) = person_id {
247        local_var_req_builder = local_var_req_builder.query(&[("person_id", &local_var_str.to_string())]);
248    }
249    if let Some(ref local_var_str) = organization_id {
250        local_var_req_builder = local_var_req_builder.query(&[("organization_id", &local_var_str.to_string())]);
251    }
252    if let Some(ref local_var_str) = filter_id {
253        local_var_req_builder = local_var_req_builder.query(&[("filter_id", &local_var_str.to_string())]);
254    }
255    if let Some(ref local_var_str) = sort {
256        local_var_req_builder = local_var_req_builder.query(&[("sort", &local_var_str.to_string())]);
257    }
258    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
259        let local_var_key = local_var_apikey.key.clone();
260        let local_var_value = match local_var_apikey.prefix {
261            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
262            None => local_var_key,
263        };
264        local_var_req_builder = local_var_req_builder.query(&[("api_token", local_var_value)]);
265    }
266    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
267        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
268    }
269    if let Some(ref local_var_token) = local_var_configuration.oauth_access_token {
270        local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned());
271    };
272
273    let local_var_req = local_var_req_builder.build()?;
274    let local_var_resp = local_var_client.execute(local_var_req).await?;
275
276    let local_var_status = local_var_resp.status();
277    let local_var_content = local_var_resp.text().await?;
278
279    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
280        serde_json::from_str(&local_var_content).map_err(Error::from)
281    } else {
282        let local_var_entity: Option<GetLeadsError> = serde_json::from_str(&local_var_content).ok();
283        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
284        Err(Error::ResponseError(local_var_error))
285    }
286}
287
288/// Searches all leads by title, notes and/or custom fields. This endpoint is a wrapper of <a href=\"https://developers.pipedrive.com/docs/api/v1/ItemSearch#searchItem\">/v1/itemSearch</a> with a narrower OAuth scope. Found leads can be filtered by the person ID and the organization ID.
289pub async fn search_leads(configuration: &configuration::Configuration, term: &str, fields: Option<&str>, exact_match: Option<bool>, person_id: Option<i32>, organization_id: Option<i32>, include_fields: Option<&str>, start: Option<i32>, limit: Option<i32>) -> Result<crate::models::SearchLeadsResponse200, Error<SearchLeadsError>> {
290    let local_var_configuration = configuration;
291
292    let local_var_client = &local_var_configuration.client;
293
294    let local_var_uri_str = format!("{}/leads/search", local_var_configuration.base_path);
295    let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
296
297    local_var_req_builder = local_var_req_builder.query(&[("term", &term.to_string())]);
298    if let Some(ref local_var_str) = fields {
299        local_var_req_builder = local_var_req_builder.query(&[("fields", &local_var_str.to_string())]);
300    }
301    if let Some(ref local_var_str) = exact_match {
302        local_var_req_builder = local_var_req_builder.query(&[("exact_match", &local_var_str.to_string())]);
303    }
304    if let Some(ref local_var_str) = person_id {
305        local_var_req_builder = local_var_req_builder.query(&[("person_id", &local_var_str.to_string())]);
306    }
307    if let Some(ref local_var_str) = organization_id {
308        local_var_req_builder = local_var_req_builder.query(&[("organization_id", &local_var_str.to_string())]);
309    }
310    if let Some(ref local_var_str) = include_fields {
311        local_var_req_builder = local_var_req_builder.query(&[("include_fields", &local_var_str.to_string())]);
312    }
313    if let Some(ref local_var_str) = start {
314        local_var_req_builder = local_var_req_builder.query(&[("start", &local_var_str.to_string())]);
315    }
316    if let Some(ref local_var_str) = limit {
317        local_var_req_builder = local_var_req_builder.query(&[("limit", &local_var_str.to_string())]);
318    }
319    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
320        let local_var_key = local_var_apikey.key.clone();
321        let local_var_value = match local_var_apikey.prefix {
322            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
323            None => local_var_key,
324        };
325        local_var_req_builder = local_var_req_builder.query(&[("api_token", local_var_value)]);
326    }
327    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
328        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
329    }
330    if let Some(ref local_var_token) = local_var_configuration.oauth_access_token {
331        local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned());
332    };
333
334    let local_var_req = local_var_req_builder.build()?;
335    let local_var_resp = local_var_client.execute(local_var_req).await?;
336
337    let local_var_status = local_var_resp.status();
338    let local_var_content = local_var_resp.text().await?;
339
340    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
341        serde_json::from_str(&local_var_content).map_err(Error::from)
342    } else {
343        let local_var_entity: Option<SearchLeadsError> = serde_json::from_str(&local_var_content).ok();
344        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
345        Err(Error::ResponseError(local_var_error))
346    }
347}
348
349/// Updates one or more properties of a lead. Only properties included in the request will be updated. Send `null` to unset a property (applicable for example for `value`, `person_id` or `organization_id`). If a lead contains custom fields, the fields' values will be included in the response in the same format as with the `Deals` endpoints. If a custom field's value hasn't been set for the lead, it won't appear in the response. Please note that leads do not have a separate set of custom fields, instead they inherit the custom fields’ structure from deals. See an example given in the <a href=\"https://pipedrive.readme.io/docs/updating-custom-field-value\" target=\"_blank\" rel=\"noopener noreferrer\">updating custom fields’ values tutorial</a>.
350pub async fn update_lead(configuration: &configuration::Configuration, id: &str, update_lead_request: Option<crate::models::UpdateLeadRequest>) -> Result<crate::models::OneLeadResponse200, Error<UpdateLeadError>> {
351    let local_var_configuration = configuration;
352
353    let local_var_client = &local_var_configuration.client;
354
355    let local_var_uri_str = format!("{}/leads/{id}", local_var_configuration.base_path, id=crate::apis::urlencode(id));
356    let mut local_var_req_builder = local_var_client.request(reqwest::Method::PATCH, local_var_uri_str.as_str());
357
358    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
359        let local_var_key = local_var_apikey.key.clone();
360        let local_var_value = match local_var_apikey.prefix {
361            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
362            None => local_var_key,
363        };
364        local_var_req_builder = local_var_req_builder.query(&[("api_token", local_var_value)]);
365    }
366    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
367        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
368    }
369    if let Some(ref local_var_token) = local_var_configuration.oauth_access_token {
370        local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned());
371    };
372    local_var_req_builder = local_var_req_builder.json(&update_lead_request);
373
374    let local_var_req = local_var_req_builder.build()?;
375    let local_var_resp = local_var_client.execute(local_var_req).await?;
376
377    let local_var_status = local_var_resp.status();
378    let local_var_content = local_var_resp.text().await?;
379
380    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
381        serde_json::from_str(&local_var_content).map_err(Error::from)
382    } else {
383        let local_var_entity: Option<UpdateLeadError> = serde_json::from_str(&local_var_content).ok();
384        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
385        Err(Error::ResponseError(local_var_error))
386    }
387}
388