scim_server/schema/
embedded.rs

1//! Embedded core SCIM schemas for schema discovery functionality.
2//!
3//! This module provides the core SCIM schemas (User, Group, ServiceProviderConfig)
4//! embedded as static strings, eliminating the need for external schema files
5//! for basic schema discovery functionality.
6
7/// Returns the core User schema as a JSON string.
8///
9/// This is the standard SCIM 2.0 User schema as defined in RFC 7643.
10pub fn core_user_schema() -> &'static str {
11    r#"{
12  "id": "urn:ietf:params:scim:schemas:core:2.0:User",
13  "name": "User",
14  "description": "User Account",
15  "attributes": [
16    {
17      "name": "id",
18      "type": "string",
19      "multiValued": false,
20      "required": false,
21      "caseExact": true,
22      "mutability": "readOnly",
23      "returned": "always",
24      "uniqueness": "server"
25    },
26    {
27      "name": "userName",
28      "type": "string",
29      "multiValued": false,
30      "required": true,
31      "caseExact": false,
32      "mutability": "readWrite",
33      "returned": "default",
34      "uniqueness": "server"
35    },
36    {
37      "name": "externalId",
38      "type": "string",
39      "multiValued": false,
40      "required": false,
41      "caseExact": true,
42      "mutability": "readWrite",
43      "returned": "default",
44      "uniqueness": "none"
45    },
46    {
47      "name": "displayName",
48      "type": "string",
49      "multiValued": false,
50      "required": false,
51      "caseExact": false,
52      "mutability": "readWrite",
53      "returned": "default",
54      "uniqueness": "none"
55    },
56    {
57      "name": "nickName",
58      "type": "string",
59      "multiValued": false,
60      "required": false,
61      "caseExact": false,
62      "mutability": "readWrite",
63      "returned": "default",
64      "uniqueness": "none"
65    },
66    {
67      "name": "profileUrl",
68      "type": "reference",
69      "multiValued": false,
70      "required": false,
71      "caseExact": false,
72      "mutability": "readWrite",
73      "returned": "default",
74      "uniqueness": "none"
75    },
76    {
77      "name": "title",
78      "type": "string",
79      "multiValued": false,
80      "required": false,
81      "caseExact": false,
82      "mutability": "readWrite",
83      "returned": "default",
84      "uniqueness": "none"
85    },
86    {
87      "name": "userType",
88      "type": "string",
89      "multiValued": false,
90      "required": false,
91      "caseExact": false,
92      "mutability": "readWrite",
93      "returned": "default",
94      "uniqueness": "none"
95    },
96    {
97      "name": "preferredLanguage",
98      "type": "string",
99      "multiValued": false,
100      "required": false,
101      "caseExact": false,
102      "mutability": "readWrite",
103      "returned": "default",
104      "uniqueness": "none"
105    },
106    {
107      "name": "locale",
108      "type": "string",
109      "multiValued": false,
110      "required": false,
111      "caseExact": false,
112      "mutability": "readWrite",
113      "returned": "default",
114      "uniqueness": "none"
115    },
116    {
117      "name": "timezone",
118      "type": "string",
119      "multiValued": false,
120      "required": false,
121      "caseExact": false,
122      "mutability": "readWrite",
123      "returned": "default",
124      "uniqueness": "none"
125    },
126    {
127      "name": "name",
128      "type": "complex",
129      "multiValued": false,
130      "required": false,
131      "caseExact": false,
132      "mutability": "readWrite",
133      "returned": "default",
134      "uniqueness": "none",
135      "subAttributes": [
136        {
137          "name": "formatted",
138          "type": "string",
139          "multiValued": false,
140          "required": false,
141          "caseExact": false,
142          "mutability": "readWrite",
143          "returned": "default",
144          "uniqueness": "none"
145        },
146        {
147          "name": "familyName",
148          "type": "string",
149          "multiValued": false,
150          "required": false,
151          "caseExact": false,
152          "mutability": "readWrite",
153          "returned": "default",
154          "uniqueness": "none"
155        },
156        {
157          "name": "givenName",
158          "type": "string",
159          "multiValued": false,
160          "required": false,
161          "caseExact": false,
162          "mutability": "readWrite",
163          "returned": "default",
164          "uniqueness": "none"
165        },
166        {
167          "name": "middleName",
168          "type": "string",
169          "multiValued": false,
170          "required": false,
171          "caseExact": false,
172          "mutability": "readWrite",
173          "returned": "default",
174          "uniqueness": "none"
175        },
176        {
177          "name": "honorificPrefix",
178          "type": "string",
179          "multiValued": false,
180          "required": false,
181          "caseExact": false,
182          "mutability": "readWrite",
183          "returned": "default",
184          "uniqueness": "none"
185        },
186        {
187          "name": "honorificSuffix",
188          "type": "string",
189          "multiValued": false,
190          "required": false,
191          "caseExact": false,
192          "mutability": "readWrite",
193          "returned": "default",
194          "uniqueness": "none"
195        }
196      ]
197    },
198    {
199      "name": "emails",
200      "type": "complex",
201      "multiValued": true,
202      "required": false,
203      "caseExact": false,
204      "mutability": "readWrite",
205      "returned": "default",
206      "uniqueness": "none",
207      "subAttributes": [
208        {
209          "name": "value",
210          "type": "string",
211          "multiValued": false,
212          "required": true,
213          "caseExact": false,
214          "mutability": "readWrite",
215          "returned": "default",
216          "uniqueness": "none"
217        },
218        {
219          "name": "type",
220          "type": "string",
221          "multiValued": false,
222          "required": false,
223          "caseExact": false,
224          "mutability": "readWrite",
225          "returned": "default",
226          "uniqueness": "none",
227          "canonicalValues": ["work", "home", "other"]
228        },
229        {
230          "name": "primary",
231          "type": "boolean",
232          "multiValued": false,
233          "required": false,
234          "caseExact": false,
235          "mutability": "readWrite",
236          "returned": "default",
237          "uniqueness": "none"
238        },
239        {
240          "name": "display",
241          "type": "string",
242          "multiValued": false,
243          "required": false,
244          "caseExact": false,
245          "mutability": "readWrite",
246          "returned": "default",
247          "uniqueness": "none"
248        }
249      ]
250    },
251    {
252      "name": "phoneNumbers",
253      "type": "complex",
254      "multiValued": true,
255      "required": false,
256      "caseExact": false,
257      "mutability": "readWrite",
258      "returned": "default",
259      "uniqueness": "none",
260      "subAttributes": [
261        {
262          "name": "value",
263          "type": "string",
264          "multiValued": false,
265          "required": true,
266          "caseExact": false,
267          "mutability": "readWrite",
268          "returned": "default",
269          "uniqueness": "none"
270        },
271        {
272          "name": "type",
273          "type": "string",
274          "multiValued": false,
275          "required": false,
276          "caseExact": false,
277          "mutability": "readWrite",
278          "returned": "default",
279          "uniqueness": "none",
280          "canonicalValues": ["work", "home", "mobile", "fax", "pager", "other"]
281        },
282        {
283          "name": "primary",
284          "type": "boolean",
285          "multiValued": false,
286          "required": false,
287          "caseExact": false,
288          "mutability": "readWrite",
289          "returned": "default",
290          "uniqueness": "none"
291        },
292        {
293          "name": "display",
294          "type": "string",
295          "multiValued": false,
296          "required": false,
297          "caseExact": false,
298          "mutability": "readWrite",
299          "returned": "default",
300          "uniqueness": "none"
301        }
302      ]
303    },
304    {
305      "name": "addresses",
306      "type": "complex",
307      "multiValued": true,
308      "required": false,
309      "caseExact": false,
310      "mutability": "readWrite",
311      "returned": "default",
312      "uniqueness": "none",
313      "subAttributes": [
314        {
315          "name": "formatted",
316          "type": "string",
317          "multiValued": false,
318          "required": false,
319          "caseExact": false,
320          "mutability": "readWrite",
321          "returned": "default",
322          "uniqueness": "none"
323        },
324        {
325          "name": "streetAddress",
326          "type": "string",
327          "multiValued": false,
328          "required": false,
329          "caseExact": false,
330          "mutability": "readWrite",
331          "returned": "default",
332          "uniqueness": "none"
333        },
334        {
335          "name": "locality",
336          "type": "string",
337          "multiValued": false,
338          "required": false,
339          "caseExact": false,
340          "mutability": "readWrite",
341          "returned": "default",
342          "uniqueness": "none"
343        },
344        {
345          "name": "region",
346          "type": "string",
347          "multiValued": false,
348          "required": false,
349          "caseExact": false,
350          "mutability": "readWrite",
351          "returned": "default",
352          "uniqueness": "none"
353        },
354        {
355          "name": "postalCode",
356          "type": "string",
357          "multiValued": false,
358          "required": false,
359          "caseExact": false,
360          "mutability": "readWrite",
361          "returned": "default",
362          "uniqueness": "none"
363        },
364        {
365          "name": "country",
366          "type": "string",
367          "multiValued": false,
368          "required": false,
369          "caseExact": false,
370          "mutability": "readWrite",
371          "returned": "default",
372          "uniqueness": "none"
373        },
374        {
375          "name": "type",
376          "type": "string",
377          "multiValued": false,
378          "required": false,
379          "caseExact": false,
380          "mutability": "readWrite",
381          "returned": "default",
382          "uniqueness": "none",
383          "canonicalValues": ["work", "home", "other"]
384        },
385        {
386          "name": "primary",
387          "type": "boolean",
388          "multiValued": false,
389          "required": false,
390          "caseExact": false,
391          "mutability": "readWrite",
392          "returned": "default",
393          "uniqueness": "none"
394        }
395      ]
396    },
397    {
398      "name": "active",
399      "type": "boolean",
400      "multiValued": false,
401      "required": false,
402      "caseExact": false,
403      "mutability": "readWrite",
404      "returned": "default",
405      "uniqueness": "none"
406    },
407    {
408      "name": "meta",
409      "type": "complex",
410      "multiValued": false,
411      "required": false,
412      "caseExact": false,
413      "mutability": "readOnly",
414      "returned": "default",
415      "uniqueness": "none",
416      "subAttributes": [
417        {
418          "name": "resourceType",
419          "type": "string",
420          "multiValued": false,
421          "required": false,
422          "caseExact": true,
423          "mutability": "readOnly",
424          "returned": "default",
425          "uniqueness": "none"
426        },
427        {
428          "name": "created",
429          "type": "dateTime",
430          "multiValued": false,
431          "required": false,
432          "caseExact": false,
433          "mutability": "readOnly",
434          "returned": "default",
435          "uniqueness": "none"
436        },
437        {
438          "name": "lastModified",
439          "type": "dateTime",
440          "multiValued": false,
441          "required": false,
442          "caseExact": false,
443          "mutability": "readOnly",
444          "returned": "default",
445          "uniqueness": "none"
446        },
447        {
448          "name": "location",
449          "type": "reference",
450          "multiValued": false,
451          "required": false,
452          "caseExact": false,
453          "mutability": "readOnly",
454          "returned": "default",
455          "uniqueness": "none"
456        },
457        {
458          "name": "version",
459          "type": "string",
460          "multiValued": false,
461          "required": false,
462          "caseExact": true,
463          "mutability": "readOnly",
464          "returned": "default",
465          "uniqueness": "none"
466        }
467      ]
468    },
469    {
470      "name": "groups",
471      "type": "complex",
472      "multiValued": true,
473      "required": false,
474      "caseExact": false,
475      "mutability": "readOnly",
476      "returned": "default",
477      "uniqueness": "none",
478      "subAttributes": [
479        {
480          "name": "value",
481          "type": "string",
482          "multiValued": false,
483          "required": true,
484          "caseExact": true,
485          "mutability": "readOnly",
486          "returned": "default",
487          "uniqueness": "none"
488        },
489        {
490          "name": "$ref",
491          "type": "reference",
492          "multiValued": false,
493          "required": false,
494          "caseExact": true,
495          "mutability": "readOnly",
496          "returned": "default",
497          "uniqueness": "none",
498          "referenceTypes": ["Group"]
499        },
500        {
501          "name": "display",
502          "type": "string",
503          "multiValued": false,
504          "required": false,
505          "caseExact": false,
506          "mutability": "readOnly",
507          "returned": "default",
508          "uniqueness": "none"
509        },
510        {
511          "name": "type",
512          "type": "string",
513          "multiValued": false,
514          "required": false,
515          "caseExact": false,
516          "mutability": "readOnly",
517          "returned": "default",
518          "uniqueness": "none",
519          "canonicalValues": ["direct", "indirect"]
520        }
521      ]
522    }
523  ]
524}"#
525}
526
527/// Returns the core Group schema as a JSON string.
528///
529/// This is the standard SCIM 2.0 Group schema as defined in RFC 7643.
530pub fn core_group_schema() -> &'static str {
531    r#"{
532  "id": "urn:ietf:params:scim:schemas:core:2.0:Group",
533  "name": "Group",
534  "description": "Group",
535  "attributes": [
536    {
537      "name": "id",
538      "type": "string",
539      "multiValued": false,
540      "description": "Unique identifier for the SCIM resource as defined by the Service Provider.",
541      "required": false,
542      "caseExact": true,
543      "mutability": "readOnly",
544      "returned": "always",
545      "uniqueness": "server"
546    },
547    {
548      "name": "externalId",
549      "type": "string",
550      "multiValued": false,
551      "description": "A String that is an identifier for the resource as defined by the provisioning client.",
552      "required": false,
553      "caseExact": false,
554      "mutability": "readWrite",
555      "returned": "default",
556      "uniqueness": "none"
557    },
558    {
559      "name": "meta",
560      "type": "complex",
561      "multiValued": false,
562      "description": "A complex attribute that contains resource metadata.",
563      "required": false,
564      "caseExact": false,
565      "mutability": "readOnly",
566      "returned": "default",
567      "uniqueness": "none",
568      "subAttributes": [
569        {
570          "name": "resourceType",
571          "type": "string",
572          "multiValued": false,
573          "description": "The name of the resource type of the resource.",
574          "required": false,
575          "caseExact": false,
576          "mutability": "readOnly",
577          "returned": "default",
578          "uniqueness": "none"
579        },
580        {
581          "name": "created",
582          "type": "dateTime",
583          "multiValued": false,
584          "description": "The DateTime the Resource was added to the Service Provider.",
585          "required": false,
586          "caseExact": false,
587          "mutability": "readOnly",
588          "returned": "default",
589          "uniqueness": "none"
590        },
591        {
592          "name": "lastModified",
593          "type": "dateTime",
594          "multiValued": false,
595          "description": "The most recent DateTime that the details of this resource were updated at the Service Provider.",
596          "required": false,
597          "caseExact": false,
598          "mutability": "readOnly",
599          "returned": "default",
600          "uniqueness": "none"
601        },
602        {
603          "name": "location",
604          "type": "string",
605          "multiValued": false,
606          "description": "The URI of the resource being returned.",
607          "required": false,
608          "caseExact": false,
609          "mutability": "readOnly",
610          "returned": "default",
611          "uniqueness": "none"
612        },
613        {
614          "name": "version",
615          "type": "string",
616          "multiValued": false,
617          "description": "The version of the resource being returned.",
618          "required": false,
619          "caseExact": false,
620          "mutability": "readOnly",
621          "returned": "default",
622          "uniqueness": "none"
623        }
624      ]
625    },
626    {
627      "name": "displayName",
628      "type": "string",
629      "multiValued": false,
630      "description": "A human-readable name for the Group. REQUIRED.",
631      "required": false,
632      "caseExact": false,
633      "mutability": "readWrite",
634      "returned": "default",
635      "uniqueness": "none"
636    },
637    {
638      "name": "members",
639      "type": "complex",
640      "multiValued": true,
641      "description": "A list of members of the Group.",
642      "required": false,
643      "caseExact": false,
644      "uniqueness": "none",
645      "subAttributes": [
646        {
647          "name": "value",
648          "type": "string",
649          "multiValued": false,
650          "description": "Identifier of the member of this Group.",
651          "required": false,
652          "caseExact": false,
653          "mutability": "immutable",
654          "returned": "default",
655          "uniqueness": "none"
656        },
657        {
658          "name": "$ref",
659          "type": "reference",
660          "referenceTypes": ["User", "Group"],
661          "multiValued": false,
662          "description": "The URI corresponding to a SCIM resource that is a member of this Group.",
663          "required": false,
664          "caseExact": false,
665          "mutability": "immutable",
666          "returned": "default",
667          "uniqueness": "none"
668        },
669        {
670          "name": "type",
671          "type": "string",
672          "multiValued": false,
673          "description": "A label indicating the type of resource, e.g., 'User' or 'Group'.",
674          "required": false,
675          "caseExact": false,
676          "canonicalValues": ["User", "Group"],
677          "mutability": "immutable",
678          "returned": "default",
679          "uniqueness": "none"
680        },
681        {
682          "name": "display",
683          "type": "string",
684          "multiValued": false,
685          "description": "A human-readable name, primarily used for display purposes. READ-ONLY.",
686          "required": false,
687          "caseExact": false,
688          "mutability": "readOnly",
689          "returned": "default",
690          "uniqueness": "none"
691        }
692      ],
693      "mutability": "readWrite",
694      "returned": "default"
695    }
696  ]
697}"#
698}
699
700/// Returns the ServiceProviderConfig schema as a JSON string.
701///
702/// This is the standard SCIM 2.0 ServiceProviderConfig schema as defined in RFC 7643.
703pub fn service_provider_config_schema() -> &'static str {
704    r#"{
705  "id": "urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig",
706  "name": "ServiceProviderConfig",
707  "description": "Schema for representing the service provider's configuration",
708  "attributes": [
709    {
710      "name": "documentationUri",
711      "type": "reference",
712      "multiValued": false,
713      "required": false,
714      "caseExact": false,
715      "mutability": "readOnly",
716      "returned": "default",
717      "uniqueness": "none"
718    },
719    {
720      "name": "patch",
721      "type": "complex",
722      "multiValued": false,
723      "required": true,
724      "caseExact": false,
725      "mutability": "readOnly",
726      "returned": "default",
727      "uniqueness": "none",
728      "subAttributes": [
729        {
730          "name": "supported",
731          "type": "boolean",
732          "multiValued": false,
733          "required": true,
734          "caseExact": false,
735          "mutability": "readOnly",
736          "returned": "default",
737          "uniqueness": "none"
738        }
739      ]
740    },
741    {
742      "name": "bulk",
743      "type": "complex",
744      "multiValued": false,
745      "required": true,
746      "caseExact": false,
747      "mutability": "readOnly",
748      "returned": "default",
749      "uniqueness": "none",
750      "subAttributes": [
751        {
752          "name": "supported",
753          "type": "boolean",
754          "multiValued": false,
755          "required": true,
756          "caseExact": false,
757          "mutability": "readOnly",
758          "returned": "default",
759          "uniqueness": "none"
760        },
761        {
762          "name": "maxOperations",
763          "type": "integer",
764          "multiValued": false,
765          "required": true,
766          "caseExact": false,
767          "mutability": "readOnly",
768          "returned": "default",
769          "uniqueness": "none"
770        },
771        {
772          "name": "maxPayloadSize",
773          "type": "integer",
774          "multiValued": false,
775          "required": true,
776          "caseExact": false,
777          "mutability": "readOnly",
778          "returned": "default",
779          "uniqueness": "none"
780        }
781      ]
782    },
783    {
784      "name": "filter",
785      "type": "complex",
786      "multiValued": false,
787      "required": true,
788      "caseExact": false,
789      "mutability": "readOnly",
790      "returned": "default",
791      "uniqueness": "none",
792      "subAttributes": [
793        {
794          "name": "supported",
795          "type": "boolean",
796          "multiValued": false,
797          "required": true,
798          "caseExact": false,
799          "mutability": "readOnly",
800          "returned": "default",
801          "uniqueness": "none"
802        },
803        {
804          "name": "maxResults",
805          "type": "integer",
806          "multiValued": false,
807          "required": true,
808          "caseExact": false,
809          "mutability": "readOnly",
810          "returned": "default",
811          "uniqueness": "none"
812        }
813      ]
814    },
815    {
816      "name": "changePassword",
817      "type": "complex",
818      "multiValued": false,
819      "required": true,
820      "caseExact": false,
821      "mutability": "readOnly",
822      "returned": "default",
823      "uniqueness": "none",
824      "subAttributes": [
825        {
826          "name": "supported",
827          "type": "boolean",
828          "multiValued": false,
829          "required": true,
830          "caseExact": false,
831          "mutability": "readOnly",
832          "returned": "default",
833          "uniqueness": "none"
834        }
835      ]
836    },
837    {
838      "name": "sort",
839      "type": "complex",
840      "multiValued": false,
841      "required": true,
842      "caseExact": false,
843      "mutability": "readOnly",
844      "returned": "default",
845      "uniqueness": "none",
846      "subAttributes": [
847        {
848          "name": "supported",
849          "type": "boolean",
850          "multiValued": false,
851          "required": true,
852          "caseExact": false,
853          "mutability": "readOnly",
854          "returned": "default",
855          "uniqueness": "none"
856        }
857      ]
858    },
859    {
860      "name": "etag",
861      "type": "complex",
862      "multiValued": false,
863      "required": true,
864      "caseExact": false,
865      "mutability": "readOnly",
866      "returned": "default",
867      "uniqueness": "none",
868      "subAttributes": [
869        {
870          "name": "supported",
871          "type": "boolean",
872          "multiValued": false,
873          "required": true,
874          "caseExact": false,
875          "mutability": "readOnly",
876          "returned": "default",
877          "uniqueness": "none"
878        }
879      ]
880    },
881    {
882      "name": "authenticationSchemes",
883      "type": "complex",
884      "multiValued": true,
885      "required": true,
886      "caseExact": false,
887      "mutability": "readOnly",
888      "returned": "default",
889      "uniqueness": "none",
890      "subAttributes": [
891        {
892          "name": "name",
893          "type": "string",
894          "multiValued": false,
895          "required": true,
896          "caseExact": false,
897          "mutability": "readOnly",
898          "returned": "default",
899          "uniqueness": "none"
900        },
901        {
902          "name": "description",
903          "type": "string",
904          "multiValued": false,
905          "required": true,
906          "caseExact": false,
907          "mutability": "readOnly",
908          "returned": "default",
909          "uniqueness": "none"
910        },
911        {
912          "name": "specUri",
913          "type": "reference",
914          "multiValued": false,
915          "required": false,
916          "caseExact": false,
917          "mutability": "readOnly",
918          "returned": "default",
919          "uniqueness": "none"
920        },
921        {
922          "name": "documentationUri",
923          "type": "reference",
924          "multiValued": false,
925          "required": false,
926          "caseExact": false,
927          "mutability": "readOnly",
928          "returned": "default",
929          "uniqueness": "none"
930        },
931        {
932          "name": "type",
933          "type": "string",
934          "multiValued": false,
935          "required": true,
936          "caseExact": false,
937          "mutability": "readOnly",
938          "returned": "default",
939          "uniqueness": "none",
940          "canonicalValues": ["oauth", "oauth2", "oauthbearertoken", "httpbasic", "httpdigest"]
941        },
942        {
943          "name": "primary",
944          "type": "boolean",
945          "multiValued": false,
946          "required": false,
947          "caseExact": false,
948          "mutability": "readOnly",
949          "returned": "default",
950          "uniqueness": "none"
951        }
952      ]
953    }
954  ]
955}"#
956}
957
958#[cfg(test)]
959mod tests {
960    use super::*;
961    use serde_json::Value;
962
963    #[test]
964    fn test_core_user_schema_parses() {
965        let schema_json = core_user_schema();
966        let parsed: Result<Value, _> = serde_json::from_str(schema_json);
967        assert!(parsed.is_ok(), "User schema should parse as valid JSON");
968
969        let schema = parsed.unwrap();
970        assert_eq!(schema["id"], "urn:ietf:params:scim:schemas:core:2.0:User");
971        assert_eq!(schema["name"], "User");
972    }
973
974    #[test]
975    fn test_core_group_schema_parses() {
976        let schema_json = core_group_schema();
977        let parsed: Result<Value, _> = serde_json::from_str(schema_json);
978        assert!(parsed.is_ok(), "Group schema should parse as valid JSON");
979
980        let schema = parsed.unwrap();
981        assert_eq!(schema["id"], "urn:ietf:params:scim:schemas:core:2.0:Group");
982        assert_eq!(schema["name"], "Group");
983    }
984
985    #[test]
986    fn test_service_provider_config_schema_parses() {
987        let schema_json = service_provider_config_schema();
988        let parsed: Result<Value, _> = serde_json::from_str(schema_json);
989        assert!(
990            parsed.is_ok(),
991            "ServiceProviderConfig schema should parse as valid JSON"
992        );
993
994        let schema = parsed.unwrap();
995        assert_eq!(
996            schema["id"],
997            "urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig"
998        );
999        assert_eq!(schema["name"], "ServiceProviderConfig");
1000    }
1001}