;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2022 pukkamustard ;;; ;;; This file is part of GNU Guix. ;;; ;;; GNU Guix is free software; you can redistribute it and/or modify it ;;; under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 3 of the License, or (at ;;; your option) any later version. ;;; ;;; GNU Guix is distributed in the hope that it will be useful, but ;;; WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;;; GNU General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Guix. If not, see . (define-module (guix eris) #:use-module (eris) #:use-module (eris blocks ipfs) #:use-module (web client) #:use-module (web response) #:use-module (srfi srfi-71) #:export (guix-eris-block-reducer)) (define (ipfs-daemon-alive?) "Attempt to connect to the IPFS daemon. Returns #t if the daemon is alive and #f else." (with-exception-handler (const #f) (lambda _ (let ((response _ (http-post (string-append (%ipfs-base-url) "/api/v0/version")))) (equal? 200 (response-code response)))) #:unwind? #t)) (define guix-eris-block-reducer (case-lambda ;; Check if IPFS Daemon is running. (() (if (ipfs-daemon-alive?) (eris-blocks-ipfs-reducer) #f)) ;; Completion. Nothing to do. ((_) #t) ((ipfs ref-block) ;; If IPFS has been initialized store block there (if ipfs (eris-blocks-ipfs-reducer ipfs ref-block) ipfs))))