changelog shortlog graph tags branches changeset files revisions annotate raw help

Mercurial > core / lisp/lib/krypt/krypt.lisp

changeset 698: 96958d3eb5b0
parent: 16fe3cdae1e2
author: Richard Westhaver <ellis@rwest.io>
date: Fri, 04 Oct 2024 22:04:59 -0400
permissions: -rw-r--r--
description: fixes
1 ;;; krypt/krypt.lisp --- Krypt API
2 
3 ;;
4 
5 ;;; Code:
6 (in-package :krypt)
7 
8 (defparameter *default-user-kryptrc* #P"~/.kryptrc")
9 
10 (defclass krypt-config (sxp id)
11  ((path :initform nil :initarg :path :type (or pathname null))))
12 
13 (defmethod print-object ((self krypt-config) stream)
14  (print-unreadable-object (self stream :type t)
15  (format stream "~S ~A" :id (format-sxhash (id self)))))
16 
17 (defun find-krypt-symbol (s)
18  (find-symbol* (symbol-name s) :krypt nil))
19 
20 (defmethod load-ast ((self krypt-config))
21  (with-slots (ast) self
22  (if (formp ast)
23  ;; ast is valid, modify object, set ast nil
24  (progn
25  (sb-int:doplist (k v) ast
26  (when-let ((s (find-krypt-symbol k)))
27  (setf (slot-value self s) v))) ;; needs to be correct package
28  (setf (ast self) nil)
29  self)
30  ;; invalid ast, signal error
31  (error 'sxp-syntax-error))))
32 
33 (defmethod build-ast ((self krypt-config) &key (nullp nil) (exclude '(ast id)))
34  (setf (ast self)
35  (unwrap-object self
36  :slots t
37  :methods nil
38  :nullp nullp
39  :exclude exclude)))
40 
41 (defun load-kryptrc (&optional (file *default-user-kryptrc*))
42  "Load a krypt configuration from FILE. Defaults to ~/.kryptrc."
43  (unless (not (probe-file file))
44  (let ((form (file-read-forms file)))
45  (load-ast (make-instance 'krypt-config :ast form :path file :id (sxhash form))))))