v/vlib/x/sessions/memory_store.v

58 lines
1.3 KiB
V

module sessions
import time
struct MemoryStoreSessions[T] {
pub mut:
created_at time.Time
data T
}
// MemoryStore stores sessions in a `map` in memory only.
pub struct MemoryStore[T] {
mut:
data map[string]MemoryStoreSessions[T]
}
// get data from all sessions.
pub fn (mut store MemoryStore[T]) all() ![]T {
return store.data.values().map(it.data)
}
// get session for session id `sid`. The session can be `max_age` old.
// `max_age` will be ignored when set to `0`
pub fn (mut store MemoryStore[T]) get(sid string, max_age time.Duration) !T {
if record := store.data[sid] {
// session is expired
if max_age != 0 && record.created_at.add(max_age) < time.now() {
store.destroy(sid)!
return error('session is expired')
}
return record.data
} else {
return error('session does not exist')
}
}
// destroy data for session id `sid`.
pub fn (mut store MemoryStore[T]) destroy(sid string) ! {
store.data.delete(sid)
}
// clear all sessions.
pub fn (mut store MemoryStore[T]) clear() ! {
store.data.clear()
}
// set session data for session id `sid`.
pub fn (mut store MemoryStore[T]) set(sid string, val T) ! {
if sid in store.data {
store.data[sid].data = val
} else {
store.data[sid] = MemoryStoreSessions[T]{
created_at: time.now()
data: val
}
}
}