# Library Structure This library is generally broken into three components you need to understand. ## Configs Configs are collections of fields related to a single request. For example, if one wanted to use the `sendMessage` endpoint, you could use the `MessageConfig` struct to configure the request. There is a one-to-one relationship between Telegram endpoints and configs. They generally have the naming pattern of removing the `send` prefix and they all end with the `Config` suffix. They generally implement the `Chattable` interface. If they can send files, they implement the `Fileable` interface. ## Helpers Helpers are easier ways of constructing common Configs. Instead of having to create a `MessageConfig` struct and remember to set the `ChatID` and `Text`, you can use the `NewMessage` helper method. It takes the two required parameters for the request to succeed. You can then set fields on the resulting `MessageConfig` after it's creation. They are generally named the same as method names except with `send` replaced with `New`. ## Methods Methods are used to send Configs after they are constructed. Generally, `Request` is the lowest level method you'll have to call. It accepts a `Chattable` parameter and knows how to upload files if needed. It returns an `APIResponse`, the most general return type from the Bot API. This method is called for any endpoint that doesn't have a more specific return type. For example, `setWebhook` only returns `true` or an error. Other methods may have more specific return types. The `getFile` endpoint returns a `File`. Almost every other method returns a `Message`, which you can use `Send` to obtain. There's lower level methods such as `MakeRequest` which require an endpoint and parameters instead of accepting configs. These are primarily used internally. If you find yourself having to use them, please open an issue.