From 0313f1681a7a1290d02cd209b1b5de6eb1cb6b3f Mon Sep 17 00:00:00 2001 From: mahlon Date: Thu, 15 Jun 2023 17:08:49 +0000 Subject: [PATCH] Iniital scaffolding commit. FossilOrigin-Name: 879068412740cd5f7da23bf35a547ba7a7182370b5e9b555f22c30c007d3ebc5 --- .fossil-settings/ignore-glob | 2 ++ Makefile | 25 +++++++++++++++ README.md | 15 +++++++++ config.yml | 48 +++++++++++++++++++++++++++++ sieb.nim | 59 ++++++++++++++++++++++++++++++++++++ 5 files changed, 149 insertions(+) create mode 100644 .fossil-settings/ignore-glob create mode 100644 Makefile create mode 100644 README.md create mode 100644 config.yml create mode 100644 sieb.nim diff --git a/.fossil-settings/ignore-glob b/.fossil-settings/ignore-glob new file mode 100644 index 0000000..1e08f4a --- /dev/null +++ b/.fossil-settings/ignore-glob @@ -0,0 +1,2 @@ +Session.vim +.cache/* diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..9d9c0e2 --- /dev/null +++ b/Makefile @@ -0,0 +1,25 @@ + +FILES = sieb.nim + +default: release + +autobuild: + find . -type f -iname \*.nim | entr -c make development + +development: ${FILES} + # can use gdb with this... + nim --debugInfo --assertions:on --linedir:on -d:testing -d:nimTypeNames --nimcache:.cache c ${FILES} + +debugger: ${FILES} + nim --debugger:on --nimcache:.cache c ${FILES} + +release: ${FILES} + nim -d:release -d:nimDebugDlOpen --opt:speed --parallelBuild:0 --nimcache:.cache c ${FILES} + +docs: + nim doc ${FILES} + #nim buildIndex ${FILES} + +clean: + fossil clean -f + diff --git a/README.md b/README.md new file mode 100644 index 0000000..3b134b7 --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ + +Sieb +==== + +What's this? +------------ + + +Installation +------------ + + +Configuration +------------- + diff --git a/config.yml b/config.yml new file mode 100644 index 0000000..c123664 --- /dev/null +++ b/config.yml @@ -0,0 +1,48 @@ +# +# Example Sieb configuration file. +# + + +# Default, no logging. Relative to homedir. +logfile: sieb.log + +## Filter message before rules +#pre_filter: +# - bogofilter + +## Filter message after rules +#post_filter: +# - bogofilter + +rules: + - + headers: + woo: yeah + + +## Ordered, top down, first match wins. +## Headers are lowercased. Multiple matches are AND'ed. +## +## Delivery default is ~/Maildir, any set value is an auto-created maildir under +## that path. +## +#rules: +# - +# headers: +# x-what: pcre-matcher +# poonie: pcre-matcher +# deliver: .whatever + +# # Magic "TO" which means To: OR Cc: +# - +# headers: +# TO: regexp +# deliver: .whereever + +# # Filter message through reformail, then deliver to ~/Maildir. +# - +# headers: +# x-what: fuckery +# filter: reformail ... + + diff --git a/sieb.nim b/sieb.nim new file mode 100644 index 0000000..c9176ba --- /dev/null +++ b/sieb.nim @@ -0,0 +1,59 @@ +# vim: set et nosta sw=4 ts=4 : +# +# Copyright (c) 2023, Mahlon E. Smith +# All rights reserved. +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# * Neither the name of Mahlon E. Smith nor the names of his +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +import + std/streams, + yaml/serialization + +const + VERSION = "v0.1.0" + +type + rule = object + headers: seq[ tuple[ header: string, regexp: string ] ] + deliver {.defaultVal: "Maildir"}: string + filter {.defaultVal: ""}: string + + # Typed configuration file layout for YAML loading. + Config = object + logfile {.defaultVal: "".}: string + pre_filter {.defaultVal: @[]}: seq[string] + post_filter {.defaultVal: @[]}: seq[string] + rules {.defaultVal: @[]}: seq[rule] + + +var conf: Config + +let s = newFileStream( "config.yml" ) +load( s, conf ) +s.close + +echo conf +