all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: "Clément Lassieur" <clement@lassieur.org>
To: julien lepiller <julien@lepiller.eu>
Cc: guix-devel@gnu.org
Subject: Re: [PATCH] improve nginx-service
Date: Fri, 25 Nov 2016 11:53:31 +0100	[thread overview]
Message-ID: <87ziknvnis.fsf@lassieur.org> (raw)
In-Reply-To: <b8ab2d264e32fe097196722b346f1c25@lepiller.eu>

> I've been rethinking it, and I would like to use define-configuration 
> (from cups and dovecot) because it looks really good. But I don't want 
> to define the same config option for each possible block it can appear 
> in, and that's why I used (option). So I'm looking for a way to 
> dynamically define records for each block type, so they can be used more 
> consistently with what we have. Unfortunately, I don't see how I could 
> do that, if that is possible at all... Ludo, any idea? I'd like to be 
> able to write:
>
> (define-record-type* <nginx-option>
>    ...)
>
> (define-syntax option
>    (syntax-rule ()
>      (option mname mtype mdef mdoc mblocks))
>      (nginx-option (name mname) (type mtype) ...)))
>
> (define option-list (list
>    (option 'server-name server-name 'default "the name of the server that 
> is served by the http block" (list 'http))
>    ...))
>
> and then be able to create the block records by filtering that list:
>
> (define-nginx-configuration nginx-http-block
>    (filter ... option-list))
>
> (define-nginx-configuration nginx-events-block
>    (filter ... option-list))
>
> (define-nginx-configuration nginx-server-block
>    (filter ... option-list))
>
> So the user would then be able to write the service configuration as 
> they would for any other service we have. What I don't know is how to 
> write define-nginx-configuration (ideally it would call 
> define-configuration). With it, I can probably do the rest just fine. Or 
> maybe there is a better way I don't see yet?

I think you are looking for "eval".

(define (list->define-configuration stem fields)
  (eval `(define-configuration ,stem ,@fields) (current-module)))

(list->define-configuration 'some-configuration filtered-list)

I use it in a service I'm working on (Prosody), to handle virtualhosts.

  reply	other threads:[~2016-11-25 10:53 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-16 12:33 [PATCH] improve nginx-service Julien Lepiller
2016-10-19 21:04 ` Ludovic Courtès
2016-10-20 12:37   ` Julien Lepiller
2016-10-24 20:51     ` Ludovic Courtès
2016-10-26 19:45       ` Julien Lepiller
2016-10-27 12:41         ` Ludovic Courtès
2016-10-27 17:59           ` Julien Lepiller
2016-10-30 21:46             ` Ludovic Courtès
2016-11-02  8:22               ` Hartmut Goebel
2016-11-03 14:54                 ` Ludovic Courtès
2016-11-03 22:38                   ` Hartmut Goebel
2016-11-04 13:21                     ` Ludovic Courtès
2016-11-04 18:01                       ` Julien Lepiller
2016-11-04 21:28                         ` Hartmut Goebel
2016-11-04 22:12                           ` Julien Lepiller
2016-11-04 22:34                             ` Hartmut Goebel
2016-11-06 11:11                               ` Julien Lepiller
2016-11-04 22:58                             ` Hartmut Goebel
2016-11-06 12:18                               ` Tobias Geerinckx-Rice
2016-11-06 17:19                                 ` Ludovic Courtès
2016-11-20 12:49                                   ` Julien Lepiller
2016-11-22 22:20                                     ` Hartmut Goebel
2016-11-23  9:26                                       ` julien lepiller
2016-11-25 10:53                                         ` Clément Lassieur [this message]
2016-11-25 11:46                                           ` is using eval good style in guile?(was: [PATCH] improve nginx-service) Hartmut Goebel
2016-11-25 13:29                                             ` is using eval good style in guile? Andy Wingo
2016-11-26 21:55                                               ` Clément Lassieur
2016-11-27 21:01                                         ` [PATCH] improve nginx-service Ludovic Courtès
2016-11-06 17:33                               ` Ludovic Courtès

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87ziknvnis.fsf@lassieur.org \
    --to=clement@lassieur.org \
    --cc=guix-devel@gnu.org \
    --cc=julien@lepiller.eu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.