(in-package :cl-user) (defpackage #:assboard.utils (:use :cl) (:export #:+project-path+ #:starts-with #:loop-lines)) (in-package :assboard.utils) (defmacro aget (key alist) `(cdr (assoc ,key ,alist :test #'equal))) (defmethod yason:encode ((symbol symbol) &optional (stream *standard-output*)) (yason:encode (s-sql:to-sql-name symbol) stream)) (defparameter +project-path+ (asdf:component-pathname (asdf:find-system '#:assboard))) (defun starts-with (with-what str) (let ((len (min (length str) (length with-what)))) (equal (subseq str 0 len) with-what))) (defun vec-to-hash (vec key-fn) (loop for val across vec with result = (make-hash-table :test #'equal :size (length vec)) do (setf (gethash (funcall key-fn val) result) val) finally (return result))) (defmacro loop-lines (s &body body) `(with-input-from-string (stream ,s) (loop for line = (read-line stream nil :eof nil) until (eq line :eof) ,@body)))