services: dicod: Allow the configuration of "handlers".
* gnu/services/dict.scm (<dicod-configuration>)[handlers]: New field. (<dicod-handler>): New record type. (<dicod-database>): Add fields. (dicod-configuration-file): Support convert handlers and enhanced databases. configuration to config file. * doc/guix.texi (Miscellaneous Services): Update accordingly. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
parent
bacc1d26c6
commit
9af7ecd959
|
@ -14370,11 +14370,31 @@ This is the list of IP addresses and ports and possibly socket file
|
||||||
names to listen to (@pxref{Server Settings, @code{listen} directive,,
|
names to listen to (@pxref{Server Settings, @code{listen} directive,,
|
||||||
dico, GNU Dico Manual}).
|
dico, GNU Dico Manual}).
|
||||||
|
|
||||||
|
@item @code{handlers} (default: @var{'()})
|
||||||
|
List of @code{<dicod-handler>} objects denoting handlers (module instances).
|
||||||
|
|
||||||
@item @code{databases} (default: @var{(list %dicod-database:gcide)})
|
@item @code{databases} (default: @var{(list %dicod-database:gcide)})
|
||||||
List of @code{<dicod-database>} objects denoting dictionaries to be served.
|
List of @code{<dicod-database>} objects denoting dictionaries to be served.
|
||||||
@end table
|
@end table
|
||||||
@end deftp
|
@end deftp
|
||||||
|
|
||||||
|
@deftp {Data Type} dicod-handler
|
||||||
|
Data type representing a dictionary handler (module instance).
|
||||||
|
|
||||||
|
@table @asis
|
||||||
|
@item @code{name}
|
||||||
|
Name of the handler (module instance).
|
||||||
|
|
||||||
|
@item @code{module} (default: @var{#f})
|
||||||
|
Name of the dicod module of the handler (instance). If it is @code{#f},
|
||||||
|
the module has the same name as the handler.
|
||||||
|
(@pxref{Modules,,, dico, GNU Dico Manual}).
|
||||||
|
|
||||||
|
@item @code{options}
|
||||||
|
List of strings or gexps representing the arguments for the module handler
|
||||||
|
@end table
|
||||||
|
@end deftp
|
||||||
|
|
||||||
@deftp {Data Type} dicod-database
|
@deftp {Data Type} dicod-database
|
||||||
Data type representing a dictionary database.
|
Data type representing a dictionary database.
|
||||||
|
|
||||||
|
@ -14382,13 +14402,17 @@ Data type representing a dictionary database.
|
||||||
@item @code{name}
|
@item @code{name}
|
||||||
Name of the database, will be used in DICT commands.
|
Name of the database, will be used in DICT commands.
|
||||||
|
|
||||||
@item @code{module}
|
@item @code{handler}
|
||||||
Name of the dicod module used by this database
|
Name of the dicod handler (module instance) used by this database
|
||||||
(@pxref{Modules,,, dico, GNU Dico Manual}).
|
(@pxref{Handlers,,, dico, GNU Dico Manual}).
|
||||||
|
|
||||||
|
@item @code{complex?} (default: @var{#f})
|
||||||
|
Whether the database configuration complex. The complex configuration
|
||||||
|
will need a corresponding @code{<dicod-handler>} object, otherwise not.
|
||||||
|
|
||||||
@item @code{options}
|
@item @code{options}
|
||||||
List of strings or gexps representing the arguments for the module handler
|
List of strings or gexps representing the arguments for the database
|
||||||
(@pxref{Handlers,,, dico, GNU Dico Manual}).
|
(@pxref{Databases,,, dico, GNU Dico Manual}).
|
||||||
@end table
|
@end table
|
||||||
@end deftp
|
@end deftp
|
||||||
|
|
||||||
|
@ -14397,6 +14421,24 @@ A @code{<dicod-database>} object serving the GNU Collaborative International
|
||||||
Dictonary of English using the @code{gcide} package.
|
Dictonary of English using the @code{gcide} package.
|
||||||
@end defvr
|
@end defvr
|
||||||
|
|
||||||
|
The following is an example @code{dicod-service} configuration.
|
||||||
|
|
||||||
|
@example
|
||||||
|
(dicod-service #:config
|
||||||
|
(dicod-configuration
|
||||||
|
(handlers (list (dicod-handler
|
||||||
|
(name "wordnet")
|
||||||
|
(module "dictorg")
|
||||||
|
(options
|
||||||
|
(list #~(string-append "dbdir=" #$wordnet))))))
|
||||||
|
(databases (list (dicod-database
|
||||||
|
(name "wordnet")
|
||||||
|
(complex? #t)
|
||||||
|
(handler "wordnet")
|
||||||
|
(options '("database=wn")))
|
||||||
|
%dicod-database:gcide))))
|
||||||
|
@end example
|
||||||
|
|
||||||
@subsubsection Version Control
|
@subsubsection Version Control
|
||||||
|
|
||||||
The @code{(gnu services version-control)} module provides the following services:
|
The @code{(gnu services version-control)} module provides the following services:
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
;;; GNU Guix --- Functional package management for GNU
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com>
|
;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com>
|
||||||
;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
|
;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
|
||||||
|
;;; Copyright © 2017 Huang Ying <huang.ying.caritas@gmail.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
;;;
|
;;;
|
||||||
|
@ -32,6 +33,7 @@
|
||||||
#:export (dicod-service
|
#:export (dicod-service
|
||||||
dicod-service-type
|
dicod-service-type
|
||||||
dicod-configuration
|
dicod-configuration
|
||||||
|
dicod-handler
|
||||||
dicod-database
|
dicod-database
|
||||||
%dicod-database:gcide))
|
%dicod-database:gcide))
|
||||||
|
|
||||||
|
@ -46,21 +48,30 @@
|
||||||
(dico dicod-configuration-dico (default dico))
|
(dico dicod-configuration-dico (default dico))
|
||||||
(interfaces dicod-configuration-interfaces ;list of strings
|
(interfaces dicod-configuration-interfaces ;list of strings
|
||||||
(default '("localhost")))
|
(default '("localhost")))
|
||||||
(databases dicod-configuration-databases
|
(handlers dicod-configuration-handlers ;list of <dicod-handler>
|
||||||
;; list of <dicod-database>
|
(default '()))
|
||||||
|
(databases dicod-configuration-databases ;list of <dicod-database>
|
||||||
(default (list %dicod-database:gcide))))
|
(default (list %dicod-database:gcide))))
|
||||||
|
|
||||||
|
(define-record-type* <dicod-handler>
|
||||||
|
dicod-handler make-dicod-handler
|
||||||
|
dicod-handler?
|
||||||
|
(name dicod-handler-name)
|
||||||
|
(module dicod-handler-module (default #f))
|
||||||
|
(options dicod-handler-options (default '())))
|
||||||
|
|
||||||
(define-record-type* <dicod-database>
|
(define-record-type* <dicod-database>
|
||||||
dicod-database make-dicod-database
|
dicod-database make-dicod-database
|
||||||
dicod-database?
|
dicod-database?
|
||||||
(name dicod-database-name)
|
(name dicod-database-name)
|
||||||
(module dicod-database-module)
|
(handler dicod-database-handler)
|
||||||
|
(complex? dicod-database-complex? (default #f))
|
||||||
(options dicod-database-options (default '())))
|
(options dicod-database-options (default '())))
|
||||||
|
|
||||||
(define %dicod-database:gcide
|
(define %dicod-database:gcide
|
||||||
(dicod-database
|
(dicod-database
|
||||||
(name "gcide")
|
(name "gcide")
|
||||||
(module "gcide")
|
(handler "gcide")
|
||||||
(options (list #~(string-append "dbdir=" #$gcide "/share/gcide")
|
(options (list #~(string-append "dbdir=" #$gcide "/share/gcide")
|
||||||
"idxdir=/var/run/dicod"))))
|
"idxdir=/var/run/dicod"))))
|
||||||
|
|
||||||
|
@ -76,22 +87,47 @@
|
||||||
(shell (file-append shadow "/sbin/nologin")))))
|
(shell (file-append shadow "/sbin/nologin")))))
|
||||||
|
|
||||||
(define (dicod-configuration-file config)
|
(define (dicod-configuration-file config)
|
||||||
|
(define handler->text
|
||||||
|
(match-lambda
|
||||||
|
(($ <dicod-handler> name #f '())
|
||||||
|
`("
|
||||||
|
load-module " ,name ";"))
|
||||||
|
(($ <dicod-handler> name #f options)
|
||||||
|
(handler->text (dicod-handler
|
||||||
|
(name name)
|
||||||
|
(module name)
|
||||||
|
(options options))))
|
||||||
|
(($ <dicod-handler> name module options)
|
||||||
|
`("
|
||||||
|
load-module " ,name " {
|
||||||
|
command \"" ,module (string-join (list ,@options) " " 'prefix) "\";
|
||||||
|
}\n"))))
|
||||||
|
|
||||||
(define database->text
|
(define database->text
|
||||||
(match-lambda
|
(match-lambda
|
||||||
(($ <dicod-database> name module options)
|
(($ <dicod-database> name handler #f options)
|
||||||
|
(append
|
||||||
|
(handler->text (dicod-handler
|
||||||
|
(name handler)))
|
||||||
|
(database->text (dicod-database
|
||||||
|
(name name)
|
||||||
|
(handler handler)
|
||||||
|
(complex? #t)
|
||||||
|
(options options)))))
|
||||||
|
(($ <dicod-database> name handler complex? options)
|
||||||
`("
|
`("
|
||||||
load-module " ,module ";
|
|
||||||
database {
|
database {
|
||||||
name \"" ,name "\";
|
name \"" ,name "\";
|
||||||
handler \"" ,module
|
handler \"" ,handler
|
||||||
(string-join (list ,@options) " " 'prefix) "\";
|
(string-join (list ,@options) " " 'prefix) "\";
|
||||||
}\n"))))
|
}\n"))))
|
||||||
|
|
||||||
(define configuration->text
|
(define configuration->text
|
||||||
(match-lambda
|
(match-lambda
|
||||||
(($ <dicod-configuration> dico (interfaces ...) databases)
|
(($ <dicod-configuration> dico (interfaces ...) handlers databases)
|
||||||
(append `("listen ("
|
(append `("listen ("
|
||||||
,(string-join interfaces ", ") ");\n")
|
,(string-join interfaces ", ") ");\n")
|
||||||
|
(append-map handler->text handlers)
|
||||||
(append-map database->text databases)))))
|
(append-map database->text databases)))))
|
||||||
|
|
||||||
(apply mixed-text-file "dicod.conf" (configuration->text config)))
|
(apply mixed-text-file "dicod.conf" (configuration->text config)))
|
||||||
|
|
Loading…
Reference in New Issue