Subject: [bug#67842] [PATCH 4/4] services: mympd: Refactor serialization process.

From: Bruno Victal <[email-masked]>
Date: Sat, 16 Dec 2023 19:36:21 +0000

Hi Liliana,

On 2023-12-16 01:44, Liliana Marie Prikler wrote:
> Am Freitag, dem 15.12.2023 um 21:02 +0000 schrieb Bruno Victal:
>> -(define-maybe/no-serialization integer)
>> +(define-maybe/no-serialization exact-integer)
> At the risk of asking a silly question, what's the difference between
> an integer and an exact integer?

IIUC it has to do with whether a decimal point is present or not,
which influences the serialization process. (e.g. having port set
to 8080.0 doesn't make much sense even though it is an integer)

--8<---------------cut here---------------start------------->8---
$ cat integer-dem.scm
#!/usr/bin/env -S guile --no-auto-compile
!#

(for-each
 (lambda (s)
   (format #t "Formatted output: ~a~%" s)
   (format #t "number->string: ~a~%" (number->string s))
   (format #t "Integer? ~a~%" (integer? s))
   (format #t "Exact-integer? ~a~%" (exact-integer? s))
   (newline))
 (list 64 128.0))

$ ./integer-dem.scm
Formatted output: 64
number->string: 64
Integer? #t
Exact-integer? #t

Formatted output: 128.0
number->string: 128.0
Integer? #t
Exact-integer? #f
--8<---------------cut here---------------end--------------->8---

>>    (port
>> -   (maybe-port 80)
>> -   "HTTP port to listen on.")
>> +   (maybe-exact-integer 80)
> Losing the information that this is a port (i.e. only integers that fit
> into a uint16 are valid) is imho not great.

I'm not too happy with this either, though in hindsight I think
redefining 'port?' (from Guile Ports) was a bad idea. At the moment
the (re)defined port? predicate only checks whether the value is an
integer, so switching it to exact-integer doesn't seem to change things
much. (other than being stricter in criteria)

Alternatively we could have a proper predicate, perhaps named ip-port?
that would not only perform the exact-integer? check, but also test
whether it fits within a uint16. I'm more inclined to introduce this
kind of change in a separate series that would define it in a reusable
manner and perform a cleanup run across the existing services though.

-- 
Furthermore, I consider that nonfree software must be eradicated.

Cheers,
Bruno.