Re: Specifying callbacks for behaviours extending gen_server

Brett Hemes <[email protected]>
Newsgroups gmane.comp.lang.erlang.general
Message-ID <CH2PR03MB53360C0955EEF4029F217F19BE809@CH2PR03MB5336.namprd03.prod.outlook.com>
I was trying out the approach of the first answer here (https://stackoverflow.com/questions/6745183/erlang-extended-gen-server).  In this approach, the extension behaviour get first crack at all of the gen_server messages and then forwards the user-module-specific stuff to the user module’s gen_server implementation.

Basically I have written a bunch of (tested/working) TCP client/server interaction code as a gen_server and have a bunch of other modules that add specific functionality on top but require the same TCP handshaking.  My idea was to wrap my working stuff as a behaviour but I can’t yet decide if I want to expose all of gen_server to my user modules or customize the interface.  Right now I have opted for generality and am experimenting with exposing everything but we shall see...  I am in that awkward place where I am working out my architecture while also trying to learn Erlang best practices; fun times.

Brett

From: Fernando Benavides <[email protected]>
Sent: Tuesday, February 23, 2021 9:26 AM
To: Brett Hemes <[email protected]>
Cc: [email protected]
Subject: [EXTERNAL] Re: Specifying callbacks for behaviours extending gen_server

What if you only specify your own callbacks and let your implementors use...

-behavior(your behavior).
-behavior(gen_server).

?

On Tue, 23 Feb 2021 at 16:15 Brett Hemes <[email protected]<mailto:[email protected]>> wrote:
I am designing a behaviour that extends gen_server and thus I want all of gen_server’s callback specification in addition to some additional ones on top as part of the extension.  In the past I have favored using the `-callback` attribute as recommended in the documentation but then I saw someone recommend the following when extending gen_server

> behaviour_info(Type) -> gen_server:behaviour_info(Type).

I tried combining the two approaches but such is not allowed (which makes sense).  I believe my options are to append my callbacks to gen_server’s list using `behaviour_info` or to copy gen_server’s callback specifications from the OTP source.  Copy-pasting code just feels wrong...  how bad is it to use `behaviour_info` over `-callback`?  And am I taking the right approach?

Thanks,
Brett
--
Sent from Gmail Mobile by Brujo Benavides
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.