git clone ''

(ql:quickload :cl-libyaml)


Build Status

A binding to the libyaml library.


This is a home-spun binding to the libyaml library. It's not meant as a full library for YAML, just a bare binding with a couple of utility macros. For a YAML parser and emitter using this, check out cl-yaml.

Naming Convention

The naming convention is what you'd expect: Function and type names have dashes instead of underscoes, the yaml_ prefix on every symbol has been removed, and instead you have package prefixes, but the trailing _t after every type definition has been kept, to make it easier to tell symbols that denote types from symbols that denote structure fields or functions.

For example, yaml_event_t is libyaml.event:event-t, and yaml_parser_parse is libyaml.parser:parser-parse.

Enum values like YAML_PARSE_FLOW_NODE_STATE are keywords with the YAML_ prefix removed, as in :parse-flow-node-state.


(defpackage yaml-example
  (:use :cl)
  (:import-from :libyaml.macros
  (:import-from :libyaml.event
(in-package :yaml-example)

(defun parse (string)
  (with-parser (parser string)
    (with-event (event)
      (loop do
        (when (libyaml.parser:parse parser event)
          (let ((type (event-type event)))
            (print type)
            (when (eql type :stream-end-event)
              (return-from parse nil))))))))
YAML-EXAMPLE> (parse "[1,2,3]")



Copyright (c) 2015 Fernando Borretti

Licensed under the MIT License.