@@ -86,10 +86,16 @@ fn rm_permission_from_capabilities(identifier: &str, dir: &Path) -> Result<()> {
86
86
if let Ok ( mut value) = content. parse :: < toml_edit:: DocumentMut > ( ) {
87
87
if let Some ( permissions) = value. get_mut ( "permissions" ) . and_then ( |p| p. as_array_mut ( ) ) {
88
88
let prev_len = permissions. len ( ) ;
89
- permissions. retain ( |p| {
90
- p. as_str ( )
91
- . map ( |p| !identifier_match ( identifier, p) )
92
- . unwrap_or ( false )
89
+ permissions. retain ( |p| match p {
90
+ toml_edit:: Value :: String ( s) => !identifier_match ( identifier, s. value ( ) ) ,
91
+ toml_edit:: Value :: InlineTable ( o) => {
92
+ if let Some ( toml_edit:: Value :: String ( permission_name) ) = o. get ( "identifier" ) {
93
+ return !identifier_match ( identifier, permission_name. value ( ) ) ;
94
+ }
95
+
96
+ true
97
+ }
98
+ _ => false ,
93
99
} ) ;
94
100
if prev_len != permissions. len ( ) {
95
101
std:: fs:: write ( & path, value. to_string ( ) ) ?;
@@ -103,10 +109,16 @@ fn rm_permission_from_capabilities(identifier: &str, dir: &Path) -> Result<()> {
103
109
if let Ok ( mut value) = serde_json:: from_slice :: < serde_json:: Value > ( & content) {
104
110
if let Some ( permissions) = value. get_mut ( "permissions" ) . and_then ( |p| p. as_array_mut ( ) ) {
105
111
let prev_len = permissions. len ( ) ;
106
- permissions. retain ( |p| {
107
- p. as_str ( )
108
- . map ( |p| !identifier_match ( identifier, p) )
109
- . unwrap_or ( false )
112
+ permissions. retain ( |p| match p {
113
+ serde_json:: Value :: String ( s) => !identifier_match ( identifier, s) ,
114
+ serde_json:: Value :: Object ( o) => {
115
+ if let Some ( serde_json:: Value :: String ( permission_name) ) = o. get ( "identifier" ) {
116
+ return !identifier_match ( identifier, permission_name) ;
117
+ }
118
+
119
+ true
120
+ }
121
+ _ => false ,
110
122
} ) ;
111
123
if prev_len != permissions. len ( ) {
112
124
std:: fs:: write ( & path, serde_json:: to_vec_pretty ( & value) ?) ?;
0 commit comments