comparison src/luan/modules/Table.luan @ 1607:fa066aaa068c

nginx caching
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 30 Apr 2021 20:23:28 -0600
parents 465b4a0dae4a
children 19df8abc9805
comparison
equal deleted inserted replaced
1606:7c7f28c724e8 1607:fa066aaa068c
18 18
19 local Luan = require "luan:Luan.luan" 19 local Luan = require "luan:Luan.luan"
20 local error = Luan.error 20 local error = Luan.error
21 local type = Luan.type or error() 21 local type = Luan.type or error()
22 local pairs = Luan.pairs or error() 22 local pairs = Luan.pairs or error()
23 local set_metatable = Luan.set_metatable or error()
23 local toTable = TableLuan.toTable or error() 24 local toTable = TableLuan.toTable or error()
24 local copy = Table.copy or error() 25 local copy = Table.copy or error()
25 26
26 function Table.java_to_table_shallow(obj) 27 function Table.java_to_table_shallow(obj)
27 local rtn = toTable(obj) 28 local rtn = toTable(obj)
54 java_to_table_shallow = java_to_table_shallow or Table.java_to_table_shallow 55 java_to_table_shallow = java_to_table_shallow or Table.java_to_table_shallow
55 return deepen(java_to_table_shallow(obj),java_to_table_shallow) 56 return deepen(java_to_table_shallow(obj),java_to_table_shallow)
56 end 57 end
57 58
58 59
60 function Table.case_insensitive(src)
61 local String = require "luan:String.luan"
62 local lower = String.lower or error()
63
64 local map = {}
65 local mt = {}
66 function mt.__new_index(tbl,key,value)
67 if value==nil then
68 map[lower(key)] = nil
69 else
70 map[lower(key)] = { s=key, v=value }
71 end
72 end
73 function mt.__index(tbl,key)
74 local val = map[lower(key)]
75 return val and val.v
76 end
77 function mt.__pairs(tbl)
78 local fn = pairs(map)
79 return function()
80 local _, val = fn()
81 if val == nil then
82 return nil
83 end
84 return val.s, val.v
85 end
86 end
87
88 local t = {}
89 set_metatable(t,mt)
90 for k,v in pairs(src or {}) do
91 t[k] = v
92 end
93 return t
94 end
95
96
59 return Table 97 return Table