Comments (6)
@learn-more I agree that moving the details declarations to their own header would be cleaner, but the reason I originally decided against this was that I really wanted MQTT-C to be one header and one source file. However, for end-users, this made implementing the PAL more daunting that it actually is, which is why I pulled the PAL out into it's own files.
I get the impression end-users' projects are pretty evenly split between embedded systems and PCs. I really want to make sure I keep the embedded-systems people happy though, because that's where I see MQTT-C's niche. Part of that IMO (let me know if you feel otherwise), is making it "easy" to copy-paste MQTT-C's files into other projects. By "easy" I mean I want it to be obvious that copy-pasting MQTT-C into your project is going to be easy. And IMO, part of that is minimizing the number of files in MQTT-C and keeping the directory structure as simple as possible.
That's actually also why I didn't add a proper build system originally, but I think a simple set of CMakeLists doesn't make MQTT-C appear more complex than it actually is.
Interested to hear what you think though!
from mqtt-c.
The first thing I do when using a library is opening the header, seeing where to start.
It starts with a license, then some explanation about the examples, followed by something from the group unpackers
, with some error-related stuff from the api group.
Then, ~1000 lines of internal stuff, followed by a bunch of api definitions starting at line ~1200, interleaved with internal functions.
In this case, my opinion would be that splitting this file into 2 would be worth it,
but ultimately, you are the author of this library, and if you would add a new file every time someone asks for it you'll end up with a huge repo at the end of the line.
from mqtt-c.
Yeah, that's fair. I don't see a reason all the internal details' delcarations couldn't be made static declarations in mqtt.c
though. Maybe that would be a good way to hide the details without adding a new file.
What do you think?
from mqtt-c.
As long as they are not needed for pal this seems like a reasonable compromise.
I would suggest to maintain some kind of structure, trying to group related stuff together.
from mqtt-c.
Another option would be to split it out in multiple files, and for source
distributions use some script to combine them in one header and one .c file.
(googletest used to do this, not sure if they still do that)
from mqtt-c.
As long as they are not needed for pal this seems like a reasonable compromise.
Yeah, this should work.
I would suggest to maintain some kind of structure, trying to group related stuff together.
Good idea
from mqtt-c.
Related Issues (20)
- Would reconnect_publisher be a thing? HOT 3
- Adding contex to callbacks HOT 1
- Insufficient validation of PUBLISH message HOT 2
- Possible undefined behaviour/bad memory access after reconnect HOT 2
- MQTT_ERROR_SEND_BUFFER_IS_FULL due to transient MQTT_ERROR_SOCKET_ERROR
- FPU-Trap when calculating client->typical_response_time
- mqtt_publish return value causes mqtt_error_str when not connected
- mqtt_publish seems to only send QoS 0 HOT 1
- Possible bug in MQTT_CLIENT_TRY_PACK macro
- MQTT-C Security Issue Report (mqtt_unpack_publish_response) HOT 2
- swap use of double variables to float HOT 1
- How to check the client has received a Connack from the Broker after connect() HOT 7
- how to check network connection state in inspector callback
- Signed integer overflow in `mqtt_error_str()` HOT 2
- We cannot pass the context of the program to mqtt publish_callback HOT 2
- Mingw compile error
- Memory alignment in Keil ARM Compiler (thumb instruction set)
- mqtt_connect does not generate a client.error if wrong username and/or password is provided
- Unable to connect openssl_publisher example to HiveMQ HOT 2
- Windows MSYS2 MINGW64: Examples fail with "MQTT_ERROR_SOCKET_ERROR" or "Failed to open socket: : No error"
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from mqtt-c.