Skip to content

Commit f642c11

Browse files
authored
Merge pull request #37 from GopherJ/bump-version
bump version
2 parents 5af28ed + f41e688 commit f642c11

File tree

4 files changed

+71
-77
lines changed

4 files changed

+71
-77
lines changed

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "diesel-adapter"
3-
version = "0.6.1"
3+
version = "0.7.0"
44
authors = ["Cheng JIANG <[email protected]>"]
55
edition = "2018"
66
license = "Apache-2.0"

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Based on [Diesel](https://github.com/diesel-rs/diesel), The current supported da
1818
Add it to `Cargo.toml`
1919

2020
```
21-
diesel-adapter = { version = "0.6.1", features = ["postgres"] }
21+
diesel-adapter = { version = "0.7.0", features = ["postgres"] }
2222
async-std = "1.5.0"
2323
```
2424

src/adapter.rs

+61-67
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,17 @@ use diesel::{
44
self,
55
r2d2::{ConnectionManager, Pool},
66
};
7+
use dotenv::dotenv;
78

89
use crate::{actions as adapter, error::*, models::*};
910

10-
use dotenv::dotenv;
1111
use std::time::Duration;
1212

1313
#[cfg(feature = "runtime-async-std")]
14-
use async_std::task;
14+
use async_std::task::spawn_blocking;
1515

1616
#[cfg(feature = "runtime-tokio")]
17-
use tokio::task;
17+
use tokio::task::spawn_blocking;
1818

1919
pub struct DieselAdapter {
2020
pool: Pool<ConnectionManager<adapter::Connection>>,
@@ -49,44 +49,41 @@ impl<'a> DieselAdapter {
4949
}
5050
}
5151

52-
pub(crate) fn save_policy_line<'a>(
53-
ptype: &'a str,
54-
rule: &'a [String],
55-
) -> Option<NewCasbinRule<'a>> {
52+
pub(crate) fn save_policy_line(ptype: &str, rule: &[String]) -> Option<NewCasbinRule> {
5653
if ptype.trim().is_empty() || rule.is_empty() {
5754
return None;
5855
}
5956

6057
let mut new_rule = NewCasbinRule {
61-
ptype,
62-
v0: "",
63-
v1: "",
64-
v2: "",
65-
v3: "",
66-
v4: "",
67-
v5: "",
58+
ptype: ptype.to_owned(),
59+
v0: "".to_owned(),
60+
v1: "".to_owned(),
61+
v2: "".to_owned(),
62+
v3: "".to_owned(),
63+
v4: "".to_owned(),
64+
v5: "".to_owned(),
6865
};
6966

70-
new_rule.v0 = &rule[0];
67+
new_rule.v0 = rule[0].to_owned();
7168

7269
if rule.len() > 1 {
73-
new_rule.v1 = &rule[1];
70+
new_rule.v1 = rule[1].to_owned();
7471
}
7572

7673
if rule.len() > 2 {
77-
new_rule.v2 = &rule[2];
74+
new_rule.v2 = rule[2].to_owned();
7875
}
7976

8077
if rule.len() > 3 {
81-
new_rule.v3 = &rule[3];
78+
new_rule.v3 = rule[3].to_owned();
8279
}
8380

8481
if rule.len() > 4 {
85-
new_rule.v4 = &rule[4];
82+
new_rule.v4 = rule[4].to_owned();
8683
}
8784

8885
if rule.len() > 5 {
89-
new_rule.v5 = &rule[5];
86+
new_rule.v5 = rule[5].to_owned();
9087
}
9188

9289
Some(new_rule)
@@ -103,29 +100,26 @@ pub(crate) fn load_policy_line(casbin_rule: &CasbinRule) -> Option<Vec<String>>
103100
pub(crate) fn load_filtered_policy_line(
104101
casbin_rule: &CasbinRule,
105102
f: &Filter,
106-
) -> Option<Vec<String>> {
103+
) -> Option<(bool, Vec<String>)> {
107104
if let Some(sec) = casbin_rule.ptype.chars().next() {
108105
if let Some(policy) = normalize_policy(casbin_rule) {
109-
let mut is_filtered = false;
106+
let mut is_filtered = true;
110107
if sec == 'p' {
111108
for (i, rule) in f.p.iter().enumerate() {
112109
if !rule.is_empty() && rule != &policy[i] {
113-
is_filtered = true
110+
is_filtered = false
114111
}
115112
}
116113
} else if sec == 'g' {
117114
for (i, rule) in f.g.iter().enumerate() {
118115
if !rule.is_empty() && rule != &policy[i] {
119-
is_filtered = true
116+
is_filtered = false
120117
}
121118
}
122119
} else {
123120
return None;
124121
}
125-
126-
if !is_filtered {
127-
return Some(policy);
128-
}
122+
return Some((is_filtered, policy));
129123
}
130124
}
131125

@@ -166,12 +160,12 @@ impl Adapter for DieselAdapter {
166160
.map_err(|err| CasbinError::from(AdapterError(Box::new(Error::PoolError(err)))))?;
167161

168162
#[cfg(feature = "runtime-tokio")]
169-
let rules = task::spawn_blocking(move || adapter::load_policy(conn))
163+
let rules = spawn_blocking(move || adapter::load_policy(conn))
170164
.await
171165
.map_err(|e| casbin::error::AdapterError(Box::new(e)))??;
172166

173167
#[cfg(feature = "runtime-async-std")]
174-
let rules = task::spawn_blocking(move || adapter::load_policy(conn)).await?;
168+
let rules = spawn_blocking(move || adapter::load_policy(conn)).await?;
175169

176170
for casbin_rule in &rules {
177171
let rule = load_policy_line(casbin_rule);
@@ -197,26 +191,27 @@ impl Adapter for DieselAdapter {
197191
.map_err(|err| CasbinError::from(AdapterError(Box::new(Error::PoolError(err)))))?;
198192

199193
#[cfg(feature = "runtime-tokio")]
200-
let rules = task::spawn_blocking(move || adapter::load_policy(conn))
194+
let rules = spawn_blocking(move || adapter::load_policy(conn))
201195
.await
202196
.map_err(|e| casbin::error::AdapterError(Box::new(e)))??;
203197

204198
#[cfg(feature = "runtime-async-std")]
205-
let rules = task::spawn_blocking(move || adapter::load_policy(conn)).await?;
199+
let rules = spawn_blocking(move || adapter::load_policy(conn)).await?;
206200

207201
for casbin_rule in &rules {
208202
let rule = load_filtered_policy_line(casbin_rule, &f);
209203

210-
if let Some(rule) = rule {
211-
if let Some(ref sec) = casbin_rule.ptype.chars().next().map(|x| x.to_string()) {
212-
if let Some(t1) = m.get_mut_model().get_mut(sec) {
213-
if let Some(t2) = t1.get_mut(&casbin_rule.ptype) {
214-
t2.get_mut_policy().insert(rule);
204+
if let Some((is_filtered, rule)) = rule {
205+
if is_filtered {
206+
self.is_filtered = is_filtered;
207+
if let Some(ref sec) = casbin_rule.ptype.chars().next().map(|x| x.to_string()) {
208+
if let Some(t1) = m.get_mut_model().get_mut(sec) {
209+
if let Some(t2) = t1.get_mut(&casbin_rule.ptype) {
210+
t2.get_mut_policy().insert(rule);
211+
}
215212
}
216213
}
217214
}
218-
} else {
219-
self.is_filtered = true;
220215
}
221216
}
222217

@@ -252,7 +247,17 @@ impl Adapter for DieselAdapter {
252247
rules.extend(new_rules);
253248
}
254249
}
255-
adapter::save_policy(conn, rules)
250+
251+
#[cfg(feature = "runtime-tokio")]
252+
{
253+
spawn_blocking(move || adapter::save_policy(conn, rules))
254+
.await
255+
.map_err(|e| casbin::error::AdapterError(Box::new(e)))?
256+
}
257+
#[cfg(feature = "runtime-async-std")]
258+
{
259+
spawn_blocking(move || adapter::save_policy(conn, rules)).await
260+
}
256261
}
257262

258263
async fn add_policy(&mut self, _sec: &str, ptype: &str, rule: Vec<String>) -> Result<bool> {
@@ -264,8 +269,8 @@ impl Adapter for DieselAdapter {
264269

265270
#[cfg(feature = "runtime-tokio")]
266271
{
267-
task::spawn_blocking(move || {
268-
if let Some(new_rule) = save_policy_line(ptype_c.as_str(), &rule) {
272+
spawn_blocking(move || {
273+
if let Some(new_rule) = save_policy_line(&ptype_c, &rule) {
269274
return adapter::add_policy(conn, new_rule);
270275
}
271276
Ok(false)
@@ -276,8 +281,8 @@ impl Adapter for DieselAdapter {
276281

277282
#[cfg(feature = "runtime-async-std")]
278283
{
279-
task::spawn_blocking(move || {
280-
if let Some(new_rule) = save_policy_line(ptype_c.as_str(), &rule) {
284+
spawn_blocking(move || {
285+
if let Some(new_rule) = save_policy_line(&ptype_c, &rule) {
281286
return adapter::add_policy(conn, new_rule);
282287
}
283288
Ok(false)
@@ -300,10 +305,10 @@ impl Adapter for DieselAdapter {
300305

301306
#[cfg(feature = "runtime-tokio")]
302307
{
303-
task::spawn_blocking(move || {
308+
spawn_blocking(move || {
304309
let new_rules = rules
305310
.iter()
306-
.filter_map(|x: &Vec<String>| save_policy_line(ptype_c.as_str(), x))
311+
.filter_map(|x: &Vec<String>| save_policy_line(&ptype_c, x))
307312
.collect::<Vec<NewCasbinRule>>();
308313
adapter::add_policies(conn, new_rules)
309314
})
@@ -313,10 +318,10 @@ impl Adapter for DieselAdapter {
313318

314319
#[cfg(feature = "runtime-async-std")]
315320
{
316-
task::spawn_blocking(move || {
321+
spawn_blocking(move || {
317322
let new_rules = rules
318323
.iter()
319-
.filter_map(|x: &Vec<String>| save_policy_line(ptype_c.as_str(), x))
324+
.filter_map(|x: &Vec<String>| save_policy_line(&ptype_c, x))
320325
.collect::<Vec<NewCasbinRule>>();
321326
adapter::add_policies(conn, new_rules)
322327
})
@@ -333,14 +338,14 @@ impl Adapter for DieselAdapter {
333338

334339
#[cfg(feature = "runtime-tokio")]
335340
{
336-
task::spawn_blocking(move || adapter::remove_policy(conn, ptype_c.as_str(), rule))
341+
spawn_blocking(move || adapter::remove_policy(conn, &ptype_c, rule))
337342
.await
338343
.map_err(|e| casbin::error::AdapterError(Box::new(e)))?
339344
}
340345

341346
#[cfg(feature = "runtime-async-std")]
342347
{
343-
task::spawn_blocking(move || adapter::remove_policy(conn, ptype_c.as_str(), rule)).await
348+
spawn_blocking(move || adapter::remove_policy(conn, &ptype_c, rule)).await
344349
}
345350
}
346351

@@ -358,15 +363,14 @@ impl Adapter for DieselAdapter {
358363

359364
#[cfg(feature = "runtime-tokio")]
360365
{
361-
task::spawn_blocking(move || adapter::remove_policies(conn, ptype_c.as_str(), rules))
366+
spawn_blocking(move || adapter::remove_policies(conn, &ptype_c, rules))
362367
.await
363368
.map_err(|e| casbin::error::AdapterError(Box::new(e)))?
364369
}
365370

366371
#[cfg(feature = "runtime-async-std")]
367372
{
368-
task::spawn_blocking(move || adapter::remove_policies(conn, ptype_c.as_str(), rules))
369-
.await
373+
spawn_blocking(move || adapter::remove_policies(conn, &ptype_c, rules)).await
370374
}
371375
}
372376

@@ -386,27 +390,17 @@ impl Adapter for DieselAdapter {
386390

387391
#[cfg(feature = "runtime-tokio")]
388392
{
389-
task::spawn_blocking(move || {
390-
adapter::remove_filtered_policy(
391-
conn,
392-
ptype_c.as_str(),
393-
field_index,
394-
field_values,
395-
)
393+
spawn_blocking(move || {
394+
adapter::remove_filtered_policy(conn, &ptype_c, field_index, field_values)
396395
})
397396
.await
398397
.map_err(|e| casbin::error::AdapterError(Box::new(e)))?
399398
}
400399

401400
#[cfg(feature = "runtime-async-std")]
402401
{
403-
task::spawn_blocking(move || {
404-
adapter::remove_filtered_policy(
405-
conn,
406-
ptype_c.as_str(),
407-
field_index,
408-
field_values,
409-
)
402+
spawn_blocking(move || {
403+
adapter::remove_filtered_policy(conn, &ptype_c, field_index, field_values)
410404
})
411405
.await
412406
}

src/models.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ pub(crate) struct CasbinRule {
1414

1515
#[derive(Insertable, Clone)]
1616
#[table_name = "casbin_rules"]
17-
pub(crate) struct NewCasbinRule<'a> {
18-
pub ptype: &'a str,
19-
pub v0: &'a str,
20-
pub v1: &'a str,
21-
pub v2: &'a str,
22-
pub v3: &'a str,
23-
pub v4: &'a str,
24-
pub v5: &'a str,
17+
pub(crate) struct NewCasbinRule {
18+
pub ptype: String,
19+
pub v0: String,
20+
pub v1: String,
21+
pub v2: String,
22+
pub v3: String,
23+
pub v4: String,
24+
pub v5: String,
2525
}

0 commit comments

Comments
 (0)