@@ -29,4 +29,62 @@ public T getBody() {
2929 public int getStatusCode () {
3030 return statusCode ;
3131 }
32+
33+ @ Override
34+ public TokenQuotaBucket getClientQuotaLimit () {
35+ String quotaHeader = headers .get ("X-Quota-Client-Limit" );
36+ if (quotaHeader != null ) {
37+ return parseQuota (quotaHeader );
38+ }
39+ return null ;
40+ }
41+
42+ @ Override
43+ public TokenQuotaBucket getOrganizationQuotaLimit () {
44+ String quotaHeader = headers .get ("X-Quota-Organization-Limit" );
45+ if (quotaHeader != null ) {
46+ return parseQuota (quotaHeader );
47+ }
48+ return null ;
49+ }
50+
51+ public static TokenQuotaBucket parseQuota (String tokenQuota ) {
52+
53+ TokenQuota perHour = null ;
54+ TokenQuota perDay = null ;
55+
56+ String [] parts = tokenQuota .split ("," );
57+ for (String part : parts ) {
58+ String [] attributes = part .split (";" );
59+ int quota = 0 , remaining = 0 , time = 0 ;
60+
61+ for (String attribute : attributes ) {
62+ String [] keyValue = attribute .split ("=" );
63+ if (keyValue .length != 2 ) continue ;
64+
65+ String key = keyValue [0 ].trim ();
66+ String value = keyValue [1 ].trim ();
67+
68+ switch (key ) {
69+ case "q" :
70+ quota = Integer .parseInt (value );
71+ break ;
72+ case "r" :
73+ remaining = Integer .parseInt (value );
74+ break ;
75+ case "t" :
76+ time = Integer .parseInt (value );
77+ break ;
78+ }
79+ }
80+
81+ if (attributes [0 ].contains ("per_hour" )) {
82+ perHour = new TokenQuota (quota , remaining , time );
83+ } else if (attributes [0 ].contains ("per_day" )) {
84+ perDay = new TokenQuota (quota , remaining , time );
85+ }
86+ }
87+
88+ return new TokenQuotaBucket (perHour , perDay );
89+ }
3290}
0 commit comments